张量流是懒惰的吗?

时间:2015-12-21 18:00:12

标签: tensorflow

假设您有一些像这样的代码

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的元素都为真时,是否会被评估?

1 个答案:

答案 0 :(得分:14)

TL; DR: TensorFlow是严格的,因此在e节点执行之前将评估ftf.select()

这引起了一些混乱。 TensorFlow首先根据生成所获取值(即sess.run()的参数)所需的静态操作来修剪数据流图。但是,一旦修剪了图形,运行时就会使用严格执行,因此必须先计算操作的所有输入(例如tf.select())才能执行该操作。

tf.control_flow_ops模块中使用tf.control_flow_ops.cond()函数对条件执行进行了实验性支持,但目前这种情况很少见。