相关疑难解决方法(0)

cond可以支持带有副作用的TF操作吗?

(源代码)文档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

11
推荐指数
2
解决办法
1351
查看次数

标签 统计

tensorflow ×1