我有一些问题需要理解有关变量共享的tensorflow文档中的示例 .

Documentation
想象一下,你创建了一个简单的图像滤波器模型,类似于我们的卷积神经网络教程模型,但只有2个卷积(为了简化这个例子) . 如果你只使用tf.Variable,你的模型可能看起来像这样 .

def my_image_filter(input_images):
    conv1_weights = tf.Variable(tf.random_normal([5, 5, 32, 32]), name="conv1_weights")
    conv1_biases = tf.Variable(tf.zeros([32]), name="conv1_biases")
    conv1 = tf.nn.conv2d(input_images, conv1_weights, strides=[1, 1, 1, 1], padding='SAME')
    relu1 = tf.nn.relu(conv1 + conv1_biases)

    conv2_weights = tf.Variable(tf.random_normal([5, 5, 32, 32]), name="conv2_weights")
    conv2_biases = tf.Variable(tf.zeros([32]), name="conv2_biases")
    conv2 = tf.nn.conv2d(relu1, conv2_weights, strides=[1, 1, 1, 1], padding='SAME')
    return tf.nn.relu(conv2 + conv2_biases)

您可以按变量HowTo中描述的方式创建,初始化,保存和加载单个变量 . 但是在构建复杂模型时,您经常需要共享大量变量,并且可能希望在一个位置初始化所有变量 . 本教程展示了如何使用tf.variable_scope()和tf.get_variable()完成此操作 .

想象一下,你创建了一个简单的图像滤波器模型,类似于我们的卷积神经网络教程模型,但只有2个卷积(为了简化这个例子) .

正如您可以轻易想象的那样,模型很快就变得比这个更复杂,甚至在这里我们已经有4个不同的变量:conv1_weights,conv1_biases,conv2_weights和conv2_biases .

当您想要重用此模型时会出现问题 . 假设您要将图像过滤器应用于2个不同的图像,image1和image2 . 您希望同一个过滤器处理的两个图像具有相同的参数 . 您可以两次调用my_image_filter(),但这会创建 two sets of variables, 4 variables in each one, for a total of 8 variables.

Question
为什么在这种情况下图表加倍?

我认为对于两个不同的输入图像执行相同的图形...

  • 使用image_1 - >更新参数运行图表

  • 使用image_2 - >更新参数运行图表

我从PyTorch开始,并不理解为什么我们首先需要变量共享 .