私は理解しそれが含まれているTensors
の1が評価されたときにTensorFlowグラフが評価される方法を大まかに:そのテンソルのためrun
またはeval
の実行がグラフに必要な計算にそのテンソルの値をカスケード計算のすべてをトリガーすると、その結果、グラフ内の「それにつながる」テンソルも計算され、それらを接続する操作はすべて実行されます。私はint_b
を使用する操作(おそらく多くの他のものの間)の計算が関与out_a
テンソルを含むグラフを持っている場合、結果として TensorFlowは、不要なグラフの再実行を避けるために最適化しますか?
an_op
自体の実行を必要とします
out_a
の計算と
int_b
の両方が同じexeファイルを使用します。
a, b, o = sess.run([out_a, int_b, an_op], feed_dict={in: x})
を実行すると、一度だけout_a
、int_b
とan_op
を評価し、in
を使用しています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
第二時間は、おそらくこれらの計算の副作用を誘発する、ありますか?
私の所見に基づいて、(case 1のように)同じ実行を使用するには、これらの変数をすべて1回実行する必要があります。 2番目のケースが好きなら、2番目と3番目のランは再び共通の操作を実行し、次の結果を返します。 – hars