我明白大致如何,當它包含Tensors
之一被評估TensorFlow圖表進行評估:的run
或eval
該張量的執行將觸發所有的級聯的計算的圖中的所需要的計算的是張量的值和結果,圖中「導致它」的任何張量也將被計算,並且連接它們的任何操作都將被運行。TensorFlow是否進行優化以避免不必要的圖形重新執行?
因此,如果我有(其中可能還有其他很多的東西)使用int_b
操作包含out_a
其中的計算涉及到張量的圖形而這又(最終)要求操作an_op
本身的執行(最終)使用in
,執行
a, b, o = sess.run([out_a, int_b, an_op], feed_dict={in: x})
將評估out_a
,int_b
和an_op
只是一次:中out_a
和int_b
計算都使用相同的EXE an_op
;並且用於提供int_b
的計算與在計算out_a
中使用的計算相同。 (如果我稍後參考a
,例如,我使用的是評估張量out_a
的值,因此不會再執行結果。)
但是如果我不在此操作中組合我的操作會發生什麼方式:
o = sess.run(an_op, feed_dict={in: x})
# ... and later yet, after I remember I need `int_b`:
b = sess.run(int_b, feed_dict={in: x})
# ... later, after I remember I need `out_a`:
a = sess.run(out_a, feed_dict={in: x})
是否有TensorFlow執行在這種情況下,以避免計算an_op
一個第二和第三時間任何優化,和int_b
第二時間,可能觸發這些計算的副作用?
基於我的觀察,您必須將所有這些變量放在單次運行中才能使用相同的執行(如情況1)。如果你喜歡第二種情況,第二次和第三次運行將再次執行通用操作並給你下一個結果。 – hars