还挺有意思的,大家都知道
tf.assign_add(ref, value)
系列的tf.assign
/tf.assign_add
等等函数在运行后,会更新ref
为新值:ref+value
,同时返回值也是ref+value
但是当代码是
a = tf.Variable(1.0)
tf.assign_add(a, 2.0)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(a))
输入却是1.0
,???
其实是因为,变量a
在a = tf.Variable(1.0)
申明,sess.run(a)
获取a
,但Graph并没有flow到tf.assign_add(a, 2.0)
,就被输出.
感兴趣的可以把tf.assign_add(a, 2.0)
换成b = tf.assign_add(a, 2.0)
,依旧输出是1.0
,这是因为sess.run(a)
依旧只让a
flow起来,b
和它并没有关系,Graph依旧没有flow到这句代码,就输出了.
但是把代码改成
a = tf.Variable(1.0)
b = tf.assign_add(a, 2.0)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(b))
print(sess.run(a))
结果为 3.0 3.0
,这又是因为sess.run(b)
,让b = tf.assign_add(a, 2.0)
真正被执行了,a b
真正被赋值了,所以正常输出.