2017-06-05 12 views
0

私は理解しそれが含まれている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_aint_ban_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第二時間は、おそらくこれらの計算の副作用を誘発する、ありますか?

+0

私の所見に基づいて、(case 1のように)同じ実行を使用するには、これらの変数をすべて1回実行する必要があります。 2番目のケースが好きなら、2番目と3番目のランは再び共通の操作を実行し、次の結果を返します。 – hars

答えて

2

はTensorFlowがan_op第二及び第三の時間を計算 避けるために、この場合に実行する任意の最適化があり、第二 時間をINT_B、おそらくそれらの計算の副作用を誘発しますか?

いいえ、それは計算を実行する必要があるとあなたのsess.run機能(あなたが説明した方法)で、リストにそれらのすべてを置くものを覚えておくことは、開発者に任されています。

次のコードを実行することによってそれを確認することができます。私のマシンのリターンに

import tensorflow as tf 
import numpy as np 
from datetime import datetime 

n = 3000 
t = np.random.rand(n,n) 
a = tf.Variable(t) 
b = tf.matmul(a, a) 

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    startTime = datetime.now() 
    _ = sess.run(b) 
    print datetime.now() - startTime 

    startTime = datetime.now() 
    _ = sess.run(b) 
    print datetime.now() - startTime 

    startTime = datetime.now() 
    _ = sess.run(b) 
    print datetime.now() - startTime 

:データがキャッシュされることになる場合

0:00:02.798704 
0:00:02.940005 
0:00:03.039798 

は、セカンドランは時間がない中で返します。

+0

ランダムな入力を使用しているため、テンソルフローがsession.run呼び出しの間にキャッシング結果であるかどうかを検出する必要はありません。これは合理的なキャッシング実装ではキャッシュ不可とマークされます。 – lahwran

+1

@lahwranこれを見つけていただきありがとうございます。問題を修正しました。 –

関連する問題