2016-06-29 11 views
1

私は、NN実装のPython sklearnパッケージの開発版を使用しています。 私の仕事は、私がsklearn用のPythonマルチプロセッシングの使用NN

この

NN1 = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic', algorithm='adam', alpha= 0 , max_iter = 40, batch_size = 10, learning_rate = 'adaptive', shuffle = True, random_state=1) 
NN2 = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic', algorithm='adam', alpha= 0 , max_iter = 40, batch_size = 10, learning_rate = 'adaptive', shuffle = True, random_state=1) 
NN3 = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic', algorithm='adam', alpha= 0 , max_iter = 40, batch_size = 10, learning_rate = 'adaptive', shuffle = True, random_state=1) 
NN4 = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic', algorithm='adam', alpha= 0 , max_iter = 40, batch_size = 10, learning_rate = 'adaptive', shuffle = True, random_state=1) 

(標準sklearn機能)のようなニューラルネットワークをクリートし、私が欲しいの予測

X_median = preprocessing.scale(data_median) 
X_min = preprocessing.scale(data_min) 
X_max = preprocessing.scale(data_max) 
X_mean = preprocessing.scale(data_mean) 

異なる入力データと平均で4 NNを訓練することです上記のデータセットでそれらを訓練する。 プールを使用せずに私のコードは次のようになります。独立している

もちろん
NN1.fit(X_mean,train_y) 
NN2.fit(X_median,train_y) 
NN3.fit(X_min,train_y) 
NN4.fit(X_max,train_y) 

トレーニング4全て以来、私はそれらを並列に実行したい、と私は、このためにプールを使用する必要がありますと仮定します。しかし、私は完全に計算がどのように実行されるのか理解していません。

pool = Pool() 
pool.apply_async(NN1.fit, args = (X_mean, train_y)) 

しかし、これは何も結果を生成しません、私も(一つだけ引数を渡す)このように入力すると、プログラムはエラーなしで終了します:私はこのような何かを書くことを前提とします! pool.apply_async(NN1.fit, args = (X_mean,))

このような計算を実行する正しい方法は何でしょうか? 誰かがPythonのマルチプロセッシングの使い方を知る良いリソースをアドバイスできますか?

+0

'apply_async'では、計算が完了したときに実行されるコールバックを提供する必要があります。私はあなたが 'apply()'を返す前に計算を待っていると思います。 'デフMYFUNC(MyNN、X、train_y): – mirosval

+0

は確かに、このようなコードは、仕事をするようだ \t MyNN.fit(X、train_y) \tリターンMyNN' 、その後 ' NN_mean = pool.apply(MYFUNC 、(NN_mean、X_mean、train_y)) ' – Shir

答えて

0

最後に、私はそれが動作製)

私はこのanswerに私の解決策をベース。だから、まず2つのヘルプ機能を作成します。

1)

def Myfunc(MyNN,X,train_y): 
MyBrain.fit(X,train_y) 
return MyNN 

をこの1つだけでこれが鍵プール方式

2)

def test_star(a_b): 
return Myfunc(*a_b) 

を供給することが望ましい機能をグローバルにすることですit- help関数の1つの引数を取って、必要な数の引数に分割するMyfuncが必要です。

は、それからちょうどこのソリューションは、超醜いですが、それが動作

​​

を作成して、私の視点から

NN_mean, NN_median = pool.map(test_star, my list). 

を実行します。私は誰かがよりエレガントな1つを作成し、それを投稿できることを願っています:)

+0

ええ、'プール 'オブジェクトは特定の方法でしかデータを扱えません。'pathos'モジュールの柔軟性を増やすことができますが、通常は別の外部モジュールを使用するのではなく、単にラッパーを使うだけです。 – Jeff

関連する問題