2017-06-11 13 views
1

変数の初期化と1回の実行呼び出しでの割り当てメソッドの実行時に、値が割り当てられないのはなぜですか?それは並列実行と何か関係がありますか、または操作の優先順位はありませんか? TF session managementについては説明しません。TF実行セッション:操作の優先度

例:

import tensorflow as tf 
W = tf.Variable(10) 

with tf.Session() as sess: 
    sess.run([W.initializer, W.assign(20)]) 
    print W.eval() # 
>> returns 10, but I would expect 20 


#running it separately: 
    sess.run(W.initializer) 
    sess.run(W.assign(20)) 
    print W.eval() 
>> returns 20 

答えて

0

私が最初の場所W.initializerにそれが初期状態に値だ上書きW.assign(20)後に実行されるので、これが起こると思われます。

あなたは第二の例では順序を変え、見ることができるように:あなたが最初のものになったよう

import tensorflow as tf 
W = tf.Variable(10) 

with tf.Session() as sess: 
    sess.run(W.assign(20)) 
    sess.run(W.initializer) 
    print W.eval() 

あなたに同じ結果が得られます。

+0

わかりましたが、それは非合理ですね。まだ初期化されていない変数に割り当てることができますか?それから、sess.run([..、...])は右からコマンドを実行していますか? –

+0

@JanSila論理的かどうかは私が決めることではありません。なぜあなたは割り当てた値を変更する必要がありますか? sess.runの注文は問題ではありません。重要なのはDAGにある場所です。 –