私は同じTensorflowグラフの中に2つのニューラルネットワーク、NN1とNN2を持っています。私はNN2の重みをNN1の重みで更新する必要があります。そのために私はsession.run([w1_nn2.assign(w1_nn1), w2_nn2.assign(w2_nn1), ...])
を実行します。ここで、wi_nnj
は重みです。これらの課題はすべて原子的な操作として実行されていますか?Tensorflowでのネットワークウェイトのスレッドセーフクローン作成?
これが当てはまらない場合は、別のスレッドのNN1でapply_gradients()
を呼び出している間に、これらの割り当てを1つのPythonスレッドで呼び出しても安全ではないでしょうか?これはスレッドセーフな方法でこれを行う最も簡単な方法でしょうか?
私は自分の質問に対する答えを知っていると思います。私はPythonを使用しているので、マルチスレッドがPythonでどのように機能するのかによって、あるスレッドによって行われた 'apply_gradients'は他のスレッドによって行われた変数割り当てと同時に実行されることはありません。これは、Tensorflowが 'apply_gradients'と割り当てを実行するためにいくつかのスレッドを起動するかもしれませんが、PythonコードはTensorflow操作が終了するまで待つので、そうです。 – nicolas