假设您有一些像这样的代码
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的所有元素都评估为true,我们就不需要了 f,结果只是(或等于)e。
问题:当会话以结果运行,并且e的元素都为真时,是否会被评估?
答案 0 :(得分:14)
TL; DR: TensorFlow是严格的,因此在e
节点执行之前将评估f
和tf.select()
。
这引起了一些混乱。 TensorFlow首先根据生成所获取值(即sess.run()
的参数)所需的静态操作来修剪数据流图。但是,一旦修剪了图形,运行时就会使用严格执行,因此必须先计算操作的所有输入(例如tf.select()
)才能执行该操作。
tf.control_flow_ops
模块中使用tf.control_flow_ops.cond()
函数对条件执行进行了实验性支持,但目前这种情况很少见。