2016-10-19 1 views
0

この2つの違いをこのanswerから理解しました。 しかし、オンラインで最も会談/コードの中で私は以下のように両方を使っている人を見つける:評価と実行の両方に使用する必要がありますか?

import tensorflow as tf 
a=tf.constant(5.0) 
b=tf.constant(6.0) 
c=a*b 
with tf.Session() as sess: 
    print(sess.run(c)) 
    print(c.eval()) 

私はそうすることの必要性と有用性を理解していません。

答えて

3

sess.run(c)c.eval()を同じセッションで呼び出すと、まったく同じ結果が得られます。

コードにsess.run<tensor>.eval()のコールを混在させることはできますが、コードの整合性が損なわれます。

私の意見では、常にsess.runを使用する方がよいでしょう.1回の呼び出しでbeacuseを使用すると、1つ以上のテンソルを評価できます。

代わりに<tensor>.eval()を使用すると、と指定された<tensor>と評価されます。

あなたがこのスクリプトを実行しているパフォーマンスの違いを見ることができます:

Tensorflowのr0.11とそれを実行する
import time 
import tensorflow as tf 

a=tf.constant(5.0) 
b=tf.constant(6.0) 
c=a*b 

start = time.time() 
with tf.Session() as sess: 
    sess.run([c]*100) 
end_run = time.time() - start 

start = time.time() 
with tf.Session() as sess: 
    for _ in range(100): 
     c.eval() 
end_eval = time.time() - start 

print('Run: {}\nEval: {}'.format(end_run, end_eval)) 

、CPU(インテルi3は)上で、それがこの結果を与える:

Run: 0.009401798248291016 
Eval: 0.021142005920410156 

することができますように参照してください、100要素のリストでの呼び出しの実行がはるかに高速ですし、100 c.eval()の呼び出しを実行します。

実際、Tensorflowは、sess.runコールでテンソルが1度だけ評価され、結果を再利用して必要に応じて他の計算を実行します。

関連する問題