2015-12-21 88 views
9

比方说,你有一些代码段像这样张量流动懒惰?

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的元素都是真实的,是评估?

回答

13

TL; DR:所述tf.select()节点执行之前 TensorFlow是严格,所以既ef进行评价。

这造成了一些混淆。 TensorFlow首先修剪数据流图,基于哪些操作是静态地产生被提取的值(即参数为sess.run())。但是,一旦修剪完图形,运行时就会执行严格的执行操作,因此在操作可以执行之前必须计算所有操作输入(例如tf.select())。

tf.control_flow_ops模块中使用tf.control_flow_ops.cond()函数对条件执行进行了实验性支持,但目前这方面的内容很少。