【发布时间】:2016-01-21 18:07:23
【问题描述】:
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
即无论谓词评估为什么值,两个函数都在运行,因此最终结果是减 1。另一方面,这段代码 sn-p 确实有效,唯一的区别是我添加了新的操作每次调用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
不知道为什么每次创建新操作都有效,而另一种情况则无效,但我显然不想添加节点,因为图表最终会变得太大。
【问题讨论】:
标签: tensorflow