在Tensorflow中共享变量,如何共享conv2d()?

时间:2017-11-16 10:50:20

标签: tensorflow

我试图以下列方式访问一次创建的变量(或Tensor和变量altoghter,还不确定TF中这些定义的分离):

def C2d(Tensor, params):
    with tf.variable_scope("conv"):
        Tensor = tf.pad(Tensor, params)
        conv = tf.contrib.layers.conv2d(Tensor, params)
    return conv

with tf.variable_scope('scope1'):
    var1 = C2d(Tensor, params)

with tf.variable_scope('scope1', reuse=True):
    var2 = C2d(Tensor, params)

print(var1 == var2)

打印False

var1: <tf.Tensor 'scope1/conv/Conv/Relu:0' shape=(475, 473, 256) dtype=float32>

var2:  <tf.Tensor 'scope1_1/conv/Conv/Relu:0' shape=(475, 473, 256) dtype=float32>

如何通过此类函数调用获得相同的Tensor?

  1. 后续问题,tf.contrib.layers.conv2d(...)作为参数weigth_initializer,如果我试图通过变量引用已经有初始化的现有张量,当我传递这个时会发生什么参数初始化器第二次?

1 个答案:

答案 0 :(得分:1)

实际上功能对我来说似乎是正确的,tf.contrib.layers.conv2d()返回图层的输出,当你调用它两次时它会返回不同的输出是正常的。

如果检查图表中创建的变量,例如tf.global_variables(),您将看到它只创建了由图层启动的变量的一个副本。

对于第二个问题,您可以将相同的变量初始值设定项传递给许多变量,因此它不应该冲突。