张量流是懒惰的吗?

yal*_*lis 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)
Run Code Online (Sandbox Code Playgroud)

b是与e和f相同形状的布尔张量.如果b的所有元素都评估为真,那么我们不需要f,结果将只是(或等于)e.

问题:当会话以结果运行,并且e的元素都是真的时,是否会被评估?

mrr*_*rry 14

TL; DR: TensorFlow是严格,所以两者ef所述之前将被评估tf.select()的节点执行.

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

tf.control_flow_ops使用该tf.control_flow_ops.cond()函数在模块中有条件执行的实验支持,但目前这种情况很少.