2015-12-21 153 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()函數對條件執行進行了實驗性支持,但目前這方面的內容很少。