在使用某些tf.contrib.layers
功能时,我发现“重复使用”#39;函数的参数不像我想的那样工作。
我认为它的行为类似于"重用"参数tf.variable_scope
。
因此,我认为如果我第一次尝试将该函数与reuse=True
一起使用,或者如果我尝试将它与reuse=False
一起用于之前已经使用过的情况,则会引发错误。
但是,在以下情况下似乎不会发出任何异常:
# The first case
av = np.random.randn(3, 4, 5)
a = tf.Variable(av)
with tf.variable_scope('foo'):
x = tf.contrib.layers.linear(a, 10, scope='bar', reuse=False)
y = tf.contrib.layers.linear(a, 10, scope='bar', reuse=False)
sess = tf.Session()
tf.global_variables_initializer().run(session=sess)
xv, yv = sess.run([x, y])
np.allclose(xv, yv) # True
# The second case
av = np.random.randn(3, 4, 5)
a = tf.Variable(av)
with tf.variable_scope('baz'):
x = tf.contrib.layers.linear(a, 10, scope='qux', reuse=True) # don't emit an error
在内部使用Dense
类的其他函数中也会出现相同的现象。
它似乎忽略了reuse
参数,并且如果变量的名称相同,则始终共享参数。这是故意还是错误?