假设你有一些像这样的代码
import tensorflow as tf ... f = h*y + z*t #Just some expression involving other tensors. e = ... # some expression that does not involve f. result = tf.select(b, e, f) sess.run(result)
b是与e和f相同形状的布尔张量.如果b的所有元素都评估为真,那么我们不需要f,结果将只是(或等于)e.
问题:当会话以结果运行,并且e的元素都是真的时,是否会被评估?
TL; DR: TensorFlow是严格,所以两者e
和f
所述之前将被评估tf.select()
的节点执行.
这引起了一些混乱.TensorFlow首先根据静态需要哪些操作来修剪数据流图,以生成所获取的值(即参数sess.run()
).但是,一旦修剪了图形,运行时就会使用严格执行,从而tf.select()
必须在该操作执行之前计算所有操作的输入(例如).
tf.control_flow_ops
使用该tf.control_flow_ops.cond()
函数在模块中有条件执行的实验支持,但目前这种情况很少.