4

最近、仮想ロボット制御にニューラルネットワークを使用するプロジェクトに取り組んでいます。私はそれをコード化するためにテンソルフローを使用し、それは円滑に実行されます。これまでは、ニューラルネットワークがどれほど優れているかを評価するためにシーケンシャルシミュレーションを使用しましたが、データを取得するのにかかる時間を短縮するために、複数のシミュレーションを並列に実行したいのですが、です。テンソルフローとマルチプロセッシング:セッションの受け渡し

これを行うには、私はPythonのmultiprocessingパッケージをインポートしています。最初は、sess変数(sess=tf.Session())をシミュレーションを実行する関数に渡していました。しかし、このsess変数を使用するステートメントに到達すると、プロセスは警告なしで終了します。彼らは非常に私はそれを動作させる方法を見つけ出すことができていない関連している一方で Tensorflow: Passing a session to a python multiprocessRunning multiple tensorflow sessions concurrently

:ビットの周りを検索した後、私は、これら2つのポストを見つけました。私は、個々のプロセスごとにセッションを作成し、ニューラルネットの重みを訓練可能なパラメータに成功なく割り当ててみました。セッションにファイルを保存してプロセス内に読み込もうとしましたが、そこには運がありません。

セッション(またはセッションのクローン)を複数のプロセスに渡すことができましたか?

ありがとうございました。

+0

私は、プロセス間でセッションのクローンを渡すことはできないと思っています.Cアドレス空間には、Pythonがコピー方法を知らない状態があるためです。しかし、新しいプロセスごとに新しいセッションを作成することは効果的です。私はマルチプロセッシングを使用していませんが、しばしば、並列に2つのプロセスを開いて、独自のTensorFlowセッションを維持します。 –

+0

2番目のリンクは複数のプロセスを並列に実行しますが、すべてのプロセス。 – MrRed

+0

TensorFlowを配布することで回避することができます。つまり、ローカルワーカーとpsを用意して、 'tf.Session(" grpc:// localhost:2222 ")' https:/ /github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/how_tos/distributed/index.md –

答えて

1

テンソルフローのラッパーとしてケラを使用していますが、同じ一般的なプリンシパルを適用する必要があります。あなたはこのような何かをしようとした場合

import keras 
from functools import partial 
from multiprocessing import Pool 

def ModelFunc(i,SomeData): 
    YourModel = Here 
    return(ModelScore) 

pool = Pool(processes = 4) 
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))): 
    print(Score) 

それは失敗します。しかし、次のようなものを試してみると:

from functools import partial 
from multiprocessing import Pool 

def ModelFunc(i,SomeData): 
    import keras 
    YourModel = Here 
    return(ModelScore) 

pool = Pool(processes = 4) 
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))): 
    print(Score) 

これはうまくいくはずです。テンソルフローをプロセスごとに個別に呼び出すことを試みてください。

+0

これはちょうど私の日を救った。ありがとう! –

関連する問題