在以下情况中使用tf.variables_initializer
时遇到问题:
counter = tf.Variable(0, name='counter')
#1 counter = tf.assign_add(counter, 1)
with tf.Session() as sess:
sess.run(tf.variables_initializer([counter]))
#2 sess.run(tf.global_variables_initializer())
print(sess.run(counter))
print(sess.run(counter))
原样,此代码段会运行,但当然counter
不计算在内。如果标记为#1
的行已取消注释,则会出现以下错误:
AttributeError:'Tensor'对象没有属性'initializer'
如果标记为#2
的行被取消注释并且注释了tf.variables_initializer
的行,则例程将正常运行(并计数)。但我不能在我的实际代码中使用tf.global_variables_initalizer
,因为我正在从检查点文件中恢复许多变量。
在这种情况下,初始化counter
的正确方法是什么?
答案 0 :(得分:0)
问题是,行counter = tf.assign_add(counter, 1)
会覆盖您的counter
变量。以下是否解决了您的问题?
counter = tf.Variable(0, name='counter', trainable=False)
increment_counter = tf.assign_add(counter, 1)
with tf.Session() as sess:
sess.run(tf.variables_initializer([counter]))
print('Orig counter state:')
print(sess.run(counter))
_ = sess.run(increment_counter)
_ = sess.run(increment_counter)
print('Final counter state:')
print(sess.run(counter))