2015-11-09 46 views

答えて

154

Tensorがある場合、t.eval()を呼び出すのは、tf.get_default_session().run(t)を呼び出すのと同じです。

次のように、デフォルトのセッションを行うことができます。

t = tf.constant(42.0) 
sess = tf.Session() 
with sess.as_default(): # or `with sess:` to close on exit 
    assert sess is tf.get_default_session() 
    assert t.eval() == sess.run(t) 

最も重要な違いは、あなたが同じ工程で多くのテンソルの値を取得するためにsess.run()を使用することができるということです。

t = tf.constant(42.0) 
u = tf.constant(37.0) 
tu = tf.mul(t, u) 
ut = tf.mul(u, t) 
with sess.as_default(): 
    tu.eval() # runs one step 
    ut.eval() # runs one step 
    sess.run([tu, ut]) # evaluates both tensors in a single step 

evalrunを呼び出すと、グラフ全体が最初から実行されることに注意してください。計算結果をキャッシュするには、tf.Variableに代入します。

+2

を供給することが何とか可能です私を修正することができますプレースホルダ? ([私の質問](http://stackoverflow.com/questions/33810990/how-to-feed-a-placeholder) – displayname

+0

2番目の例では何が違うのですか?別々の操作(またはグラフの違いは何か)を評価することができますか? – Pinocchio

+1

あなたのサンプルは実際に実行されますか?私は試みました: 'a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a、b)'そしてテンソルフローから、形状が一致しないという苦情がありました。より正確には、ランクは少なくとも2でなければなりません。 – Pinocchio

28

テンソルフローに関するFAQセッションはanswer to exactly the same questionです。私は先に行くと、それをここに残して:


tTensorオブジェクトである場合、t.eval()sessは、現在のデフォルトのセッションですsess.run(t)の省略形(であるコードの2次スニペットは等価です。

sess = tf.Session() 
c = tf.constant(5.0) 
print sess.run(c) 

c = tf.constant(5.0) 
with tf.Session(): 
    print c.eval() 

第2の例では、セッションはコンテキストマネージャーとして機能し、これをwithブロックの存続期間のデフォルトセッションとしてインストールします。コンテキストマネージャのアプローチは、単純なユースケースに対してより簡潔なコードにつながります(単体テストのような);あなたのコードが知っているなら複数のグラフとセッションを使用する場合は、Session.run()への明示的な呼び出しがより簡単です。

多くのことを明らかにする可能性があるので、FAQ全体で少なくともスキムをすることをお勧めします。

1

のeval()リストオブジェクト

tf.reset_default_graph() 

a = tf.Variable(0.2, name="a") 
b = tf.Variable(0.3, name="b") 
z = tf.constant(0.0, name="z0") 
for i in range(100): 
    z=a*tf.cos(z+i)+z*tf.sin(b-i) 
grad=tf.gradients(z,[a,b]) 

init=tf.global_variables_initializer() 

with tf.Session() as sess: 
    init.run() 
    print("z:",z.eval()) 
    print("grad",grad.eval()) 

しかしSession.run()を処理することはできません

print("grad",sess.run(grad)) 

は私が間違っている場合

関連する問題