(源代码)文档tf.cond不清楚在评估谓词时要执行的函数是否会产生副作用.我做了一些测试,但结果却相互矛盾.例如,下面的代码不起作用:
import tensorflow as tf
from tensorflow.python.ops import control_flow_ops
pred = tf.placeholder(tf.bool, [])
count = tf.Variable(0)
adder = count.assign_add(1)
subtractor = count.assign_sub(2)
my_op = control_flow_ops.cond(pred, lambda: adder, lambda: subtractor)
sess = tf.InteractiveSession()
tf.initialize_all_variables().run()
my_op.eval(feed_dict={pred: True})
count.eval() # returns -1
my_op.eval(feed_dict={pred: False})
count.eval() # returns -2
Run Code Online (Sandbox Code Playgroud)
即无论谓词评估的值是什么,两个函数都会运行,因此最终结果是减1.另一方面,这个代码片段确实有效,唯一的区别是我添加了新的操作.每次my_op调用图形:
pred = tf.placeholder(tf.bool, [])
count = tf.Variable(0)
my_op = control_flow_ops.cond(pred, lambda:count.assign_add(1), lambda:count.assign_sub(2))
sess = tf.InteractiveSession()
tf.initialize_all_variables().run()
my_op.eval(feed_dict={pred: False})
count.eval() # returns -2
my_op.eval(feed_dict={pred: True})
count.eval() # returns -1
Run Code Online (Sandbox Code Playgroud)
不确定为什么每次创建新的操作都有效,而另一种情况没有,但我显然不会添加节点,因为图形最终会变得太大.
tensorflow ×1