2017-11-28 11 views
1

tf.assign()を使用する際の競合条件をどのように扱いますか?例えば 、私のコードは、次のされている場合:Tensorflowでtf.assignを使用する場合の競合条件

y = tf.Variable(6,trainable=False,name='y'); 
x = tf.Variable(0,trainable=False,name='x'); 
assign_op = tf.assign(x, 2); 
divide_op = y/assign_op; 
answer = sess.run([divide_op]); 

私の答えは..私はこれにsess.runを分割されたと考えることができる唯一のこと3か0infのいずれかである:

_ = sess.run([assign_op]); 
answer = sess.run([divide_op]); 

上記のように操作依存関係を作成すると、競合状態が発生するという問題は解決しますが、そうではないと考えました。誰がこれについて何をすべきか知っていますか?

答えて

0

あなたはcontrol_dependenciesフロー制御機能に見てみたい:

https://www.tensorflow.org/api_docs/python/tf/Graph#control_dependencies

with tf.control_dependencies([assign_op]): 
    divide_op = y/assign_op 

これは「assign_opは」先行ブロックのグラフ要素に完了したことを確認します。

+0

したがって、私は割り当て操作からの参照を連鎖している場合、先に進む前に前の割り当てが完了していることを確認するために、複数のcontrol_dependenciesが必要ですか? assign_op参照を2か所で使用している場合はどうなりますか?どちらの方程式もcontrol_dependencies内に入ることができますか? 私はそれを試して、ポストバックします。ありがとう! –

+0

私が正しく理解していれば、それらがすべて独立していればリスト[]に追加することができるはずです。[assign_op、assign_op2、assign_op3]。操作順序にあいまい性が残っている場合は、いくつかのcontrol_dependenciesを変更する必要があります。 – mazecreator

+0

さらに、各.run()の後にグラフが最終的にリセットされるため、変数に値を割り当てる場合にのみ、分割sess.run()が機能します。これを回避するために、1年前に提案されたpartial_run()がありました。これはPython APIに組み込まれているかどうかわかりません。 – mazecreator

関連する問題