私はPythonで深いQ-learningアルゴリズムの非同期バージョンを実装しようとしています。これは、非同期更新のために異なるプロセス間で共有されたニューラルネットワークを必要とします。私は、GILのためにPythonでオブジェクト自体を共有することはかなり難しいことを知っています。そして、私は、https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Arrayを使ってその重みを単純に共有することが可能であることを発見しました。異なるPythonプロセス間で異なるニューラルネットワークの共有重みを設定する方法は?
しかし、問題はこのArrayオブジェクトは1Dであり、reshape()
とflatten()
操作をサポートしていないことです。つまり、ローカルウェイトをグローバルウェイトにコピーするたびに、すべてのウェイトを取得し、それらをこの配列に追加します。私がウェイトを元に戻したいときは、逆の変換を行う必要があります。これはかなり計算コストが高くなります。 update()
を呼び出すたびに直接グローバル重みを変更するように、共有配列(このArrayオブジェクトである必要はありません)をニューラルネットワークの重みに直接組み込むための良い方法があるのでしょうか?
ありがとうございます!