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. TensorFlowチェックポイントメタファイルとは何ですか?
- 3. TensorFlowのデバイスフィルタのフォーマットは何ですか?
- 4. difftimeと ' - 'の違いは何ですか?
- 5. A`と ``の違いは何ですか[:] `
- 6. `&`と `ref`の違いは何ですか?
- 7. バックスティックと$()の違いは何ですか?
- 8. `##`と `hashCode`の違いは何ですか?
- 9. "$^N"と "$ +"の違いは何ですか?
- 10. #{} $ {}と%{}の違いは何ですか?
- 11. typedefとの違いは何ですか?
- 12. %Qと%{}の違いは何ですか?
- 13. `==`と `is`の違いは何ですか?
- 14. $と$$の違いは何ですか?
- 15. NodeJS:「./ ..」と「..」の違いは何ですか?
- 16. は、TensorFlowでTensorFlow
- 17. $ dirtyと$ invalid:違いは何ですか?
- 18. Backbone.jsとPusherapp - 違いは何ですか?
- 19. libspeとlibspe2?違いは何ですか?
- 20. decodeURIComponentとunescapeの違いは何ですか?unescapeの問題は何ですか?
- 21. Androidでは、MotionEventのgetAction()とgetActionMasked()の違いは何ですか?
- 22. GoogleのDremelとは何ですか? Mapreduceとの違いは?
- 23. Netty 4では、ctx.closeとctx.channel.closeの違いは何ですか?
- 24. HTTPプロトコルでは、ETagとContent-MD5の違いは何ですか?
- 25. RSpecでは、before(:suite)とbefore(:all)の違いは何ですか?
- 26. matplotlibでは、set_xlimとset_xboundの違いは何ですか?
- 27. gitでは、ダングリングコミットとダブリングブロブの違いは何ですか?
- 28. Luceneでは、ANALYZEDとANALYZED_NO_NORMSの違いは何ですか?
- 29. Rubyでは、String()と#to_sの違いは何ですか?
- 30. PHPでは、 'stripslashes'と 'stripslashes'の違いは何ですか?
を供給することが何とか可能です私を修正することができますプレースホルダ? ([私の質問](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