2016-06-29 90 views
1

我正在使用開發版Python Python sklearn包與NN實現。 我的任務是培養4 NN與不同的輸入數據和平均預測使用python多處理sklearn NN

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

我創造一個神經網絡這樣

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功能)

,我想在上述數據集上進行訓練。 不使用游泳池我的代碼看起來就像這樣:

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()',它在返回之前等待計算。 – mirosval

+0

的確,似乎這樣的代碼做的工作: '高清MYFUNC(MyNN,X,train_y): \t MyNN.fit(X,train_y) \t回MyNN' 然後 'NN_mean = pool.apply(MYFUNC ,(NN_mean,X_mean,train_y))' – Shir

回答

0

最後我做了工作)

我根據我對這個answer解決方案。因此,首先創建兩個幫助功能:

1)

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

這一個是隻是爲了想要的功能全球飼料池方法

2)

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

這是關鍵它的一部分 - 幫助函數獲取1個參數並將其分割爲Myfunc所需的所需參數數目。

然後,只需創建

​​

和執行

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

從我的角度來看這個解決方案是超級難看,但它工作。我希望有人可以創造更優雅的貼子:)。

+0

是的,'pool'對象只能以某種方式處理數據。您可以通過'pathos'模塊獲得更多的靈活性,但我通常只使用包裝而不使用其他外部模塊。 – Jeff