TensorFlowには、グラフの一部を評価する2つの方法があります:変数のリストにSession.run
、Tensor.eval
になります。これらの2つの違いはありますか?TensorFlowでは、Session.run()とTensor.eval()の違いは何ですか?
113
A
答えて
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
eval
とrun
を呼び出すと、グラフ全体が最初から実行されることに注意してください。計算結果をキャッシュするには、tf.Variable
に代入します。
28
テンソルフローに関するFAQセッションはanswer to exactly the same questionです。私は先に行くと、それをここに残して:
をt
がTensor
オブジェクトである場合、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))
は私が間違っている場合
関連する問題
- 1. Session.run(Tensorflowの)/Tensor.evalは()クレイジー長時間
- 2. バッチトレーニングでsession.runのTensorflow ValueError
- 3. TensorFlow 1.1以降のKerasとtf.contrib.kerasの違いは何ですか?
- 4. Tensorflow contrib.rnnのLSTMBlockCellとBasicLSTMCellの違いは何ですか
- 5. tensorflowのvar.op.nameとvar.nameの違いは何ですか?
- 6. tensorflowのoptimizer.compute_gradient()とtf.gradients()の違いは何ですか?
- 7. Tensorflow Argmax: "axis"と "dimension"パラメータの違いは何ですか?
- 8. Tensorflow session.run feed dictのメカニズム
- 9. TensorFlowのcontrib.slim.netsとモデル/スリム/ネットの違いは何ですか? Githubのリポジトリで
- 10. TensorFlowプレースホルダの寸法 - 違いは何ですか?
- 11. Experiment Tensorflowでeval_stepとは何ですか
- 12. TensorFlowの種子とは何ですか?
- 13. TensorFlowのダイナミックRNNとは何ですか?
- 14. Tensorflowでは、タイプが_refで終わっているテンソルとテンソルがないテンソルの違いは何ですか?
- 15. $と$$の違いは何ですか?
- 16. `##`と `hashCode`の違いは何ですか?
- 17. typedefとの違いは何ですか?
- 18. NodeJS:「./ ..」と「..」の違いは何ですか?
- 19. {}())と{})の違いは何ですか?
- 20. `&`と `ref`の違いは何ですか?
- 21. `==`と `is`の違いは何ですか?
- 22. difftimeと ' - 'の違いは何ですか?
- 23. #{} $ {}と%{}の違いは何ですか?
- 24. ⊕と+の違いは何ですか?
- 25. アペンダーと〜の違いは何ですか?
- 26. "./"と "../"の違いは何ですか?
- 27. "$^N"と "$ +"の違いは何ですか?
- 28. %Qと%{}の違いは何ですか?
- 29. バックスティックと$()の違いは何ですか?
- 30. A`と ``の違いは何ですか[:] `
を供給することが何とか可能です私を修正することができますプレースホルダ? ([私の質問](http://stackoverflow.com/questions/33810990/how-to-feed-a-placeholder) – displayname
2番目の例では何が違うのですか?別々の操作(またはグラフの違いは何か)を評価することができますか? – Pinocchio
あなたのサンプルは実際に実行されますか?私は試みました: 'a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a、b)'そしてテンソルフローから、形状が一致しないという苦情がありました。より正確には、ランクは少なくとも2でなければなりません。 – Pinocchio