2016-08-29 6 views
1

私の計算グラフに2つのノードしかないとします。ノード1 - >ノード2(ノード1の出力は、ノード2の入力であるノード2はまた、ノード1の入力で動作します。。) 計算グラフは次のようになります。私の実行ノード1が使用してノード2をsess.runを使用して、実行している場合今sess.run()の後続の呼び出しで状態を消去しますか?

x = Node1(z) 

y = Node2(x, z) 

別のsess.runコールの場合、の状態は、xのようにコール間で保持されるか、またはxは2番目のコールでゼロから計算されますか。一般的に

+0

少なくとも、s.run([x、y])に対して保存されます。 – Julius

答えて

2

は、あなたassign it to a tf.Variableまたはenqueue it in a queueない限り、TensorFlowは、メモリを解放するために、できるだけ早く彼らはもはや必要とされてSession.run()の結果を計算するときに使用されているすべての中間テンソルの値を破棄します。このルールに

一つの例外は、プログラムにzを一定テンソルであり、Node1()がステートレス動作(即ちpure function)である場合、TensorFlowはconstant folding最適化の一部としてNode1()の結果をキャッシュすることができる、ということです。この最適化により、最初の実行時に余分な作業を犠牲にして、Session.run()の後続実行を高速化できます。ただし、zが変数である場合、またはNode1()がステートフルな操作の場合、TensorFlowは結果を安全にキャッシュできず、各Session.run()呼び出しで再評価されます。 (また、現在、TensorFlowは別々の引数の組をそれぞれSession.run()に変更しているので、Node1()を実行したときに計算されたxの値は定数の折り畳みで再利用されませんでした。 。)

関連する問題