tf.assignと代入演算子(=)の違いを理解しようとしています。 Iは、代入演算子をtf.assignと代入演算子(=)の相違点
import tensorflow as tf
with tf.Graph().as_default():
a = tf.Variable(1, name="a")
a = a + 1
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print sess.run(a)
print a.eval()
print a.eval()
結果を使用して、出力を
2
2
2
第として期待されている単純なtf.assign
import tensorflow as tf
with tf.Graph().as_default():
a = tf.Variable(1, name="a")
assign_op = tf.assign(a, tf.add(a,1))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print sess.run(assign_op)
print a.eval()
print a.eval()
を使用して、コード
まず3組を有します依然として2,2,2である。
第三に、私は私の質問は2回目で
ある
、
import tensorflow as tf with tf.Graph().as_default(): a = tf.Variable(1, name="a") a = tf.assign(a, tf.add(a,1)) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print sess.run(a) print a.eval() print a.eval()
両方 tf.assignと代入演算子は今、出力は2となるを使用する3、4
スニペット(=)を使用して、私はsess.run(a)を持って、それは私が割り当てopを実行しているようです。だから "a = a + 1"は内部的にassign_op = tf.assign(a、a + 1)のような代入演算を作成しますか?セッションで実行されるオペレーションは実際にはassign_opだけですか?しかし、私がa.eval()を実行すると、aをインクリメントし続けないので、evalは "静的な"変数を評価しているようです。第3のスニペットの説明方法がわかりません。なぜ2つのエバリュールが増加するのですが、2つ目のエバリュールは2つのスニペットでは違いますか?
ありがとう。
説明ありがとうございます! – user8490020
確かに、私はそれを受け入れた:)再びありがとう! – user8490020
もう少し長い間それを考えた後、フォローアップの質問があります。 :) 2番目のスニペットでは、 'a = a + 1'はadd_opを変数 'a'に割り当てます。したがって、後続の評価で 'a'値が繰り返し変更されることはありません。しかし、sess.run(a)とa.eval()を実行すると、a.eval()のtf.addの 'a'の値は何ですか? '2'を出力するので、 'a'の値は1になります。しかし、 'a'は既にadd_opに変更されていませんか?もしそうなら、add_opは最初に値2を返し、その後sess.run(a)の後のa.eval()は3を出力するでしょうか?ありがとう! – user8490020