如果使用相同名称定义变量并且tf.variable_scope
参数未设置为reuse
,则True
之前会发生错误。这在TF 1.0.0中似乎不再适用。以下最小示例显示了这一点:
import tensorflow as tf
from tensorflow.contrib import layers
print(tf.__version__)
def net(in_data, reuse=None):
with tf.variable_scope("foo", reuse=reuse):
return layers.conv2d(in_data, 3, 3)
in_data = tf.random_uniform([10, 40, 30, 3])
out_data1 = net(in_data)
out_data2 = net(in_data, reuse=None)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
rval = sess.run([out_data1, out_data2])
TF ver 0.12.0给出以下错误:
ValueError:变量foo / Conv / weights已经存在,不允许。你的意思是在VarScope中设置reuse = True吗?
TF ver 1.0.0执行时没有错误。这是行为的预期变化吗?如果是这样,如何在1.0版本中引发这种类型的错误?
请注意,此效果似乎与tf.contrib.layers
和tf.contrib.slim
相关联。 tf.layers
没有显示相同的问题。为什么???