2016-06-29 11 views
1

Ich benutze dev-Version von Python sklearn Paket mit NN-Implementierung. Meine Aufgabe ist es 4 NN mit unterschiedlichen Eingangsdaten zu trainieren und die durchschnittliche die PrognosenVerwenden von Python-Multiprozessor für Slearn 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) 

ich creat ein Neuronale Netze wie diese

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) 

(Standard sklearn Funktion)

und ich möchte um sie auf den oben beschriebenen Datensätzen zu schulen. Ohne meinen Code mit Pool wird wie folgt aussehen:

NN1.fit(X_mean,train_y) 
NN2.fit(X_median,train_y) 
NN3.fit(X_min,train_y) 
NN4.fit(X_max,train_y) 

Natürlich, da alle 4 Training unabhängig möchte ich sie parallel laufen zu lassen, und ich nehme an, ich Pool für diese verwendet werden soll. Allerdings verstehe ich nicht vollständig, wie die Berechnung durchgeführt wird. Ich würde davon ausgehen, so etwas zu schreiben:

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

Dies ist jedoch keine Ergebnisse produziert, kann ich auch wie dieser Typ (vorbei an nur ein Argument) und das Programm ohne Fehler beenden! pool.apply_async(NN1.fit, args = (X_mean,)).

Was ist der richtige Weg, um solche Berechnungen durchzuführen? Kann jemand eine gute Ressource empfehlen, um die Verwendung von Python-Multiprocessing zu verstehen?

+0

Für 'apply_async' müssen Sie einen Callback bereitstellen, der ausgeführt wird, wenn die Berechnung abgeschlossen ist. Ich denke, du willst 'apply()', das auf die Berechnung wartet, bevor es zurückkehrt. – mirosval

+0

Tatsächlich Code wie dies scheint die Arbeit tun: 'def MyFunc (MYNN, X, train_y): \t MyNN.fit (X, train_y) \t Rückkehr MyNN' und dann ' NN_mean = pool.apply (MyFunc , (NN_mean, X_mean, train_y)) ' – Shir

Antwort

0

Schließlich habe ich es Arbeit)

ich auf dieser answer meine Lösung. Also, zunächst zwei Hilfefunktionen erstellen:

1)

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

Dieser ist nur wünschenswert Funktion global machen einzuspeisen Pool Methoden

2)

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

Dies ist der Schlüssel Teil davon - Hilfefunktion, um 1 Argument zu nehmen und es auf die gewünschte Anzahl von Argumenten aufzuteilen, die Myfunc benötigt.

Erstellen Sie dann nur

mylist = [(NN_mean,X_mean, train_y), (NN_median,X_median, train_y)] 

und

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

Aus meiner Sicht ausführen diese Lösung Super hässlich ist, aber es funktioniert. Ich hoffe, jemand kann eleganter schaffen und es posten :).

+0

Ja,' Pool'-Objekte können nur mit Daten in einer bestimmten Art und Weise umgehen.Sie können mehr Flexibilität mit dem 'Pathos'-Modul erhalten, aber ich gehe normalerweise nur mit einem Wrapper und nicht mit einem anderen externen Modul. – Jeff