Ich versuche, diese Kaggle Problem mit Neural Networks zu lösen. Ich benutze Pybrain Python Library.Anzahl der versteckten Schichten, Einheiten in versteckten Schichten und Epochen, bis Neural Network beginnt sich akzeptabel zu verhalten Trainingsdaten
Es ist ein klassisches überwachtes Lernproblem. Im folgenden Code: 'Daten' Variable ist numpy Array (892 * 8). 7 Felder sind meine Features und 1 Feld ist mein Ausgabewert, der '0' oder '1' sein kann.
from pybrain.datasets import ClassificationDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
dataset = ClassificationDataSet(7,1)
for i in data:
dataset.appendLinked(i[1:],i[0])
net = buildNetwork(7,9,7,1, bias = True,hiddenclass = SigmoidLayer, outclass = TanhLayer)
trainer = BackpropTrainer(net, learningrate = 0.04, momentum = 0.96, weightdecay = 0.02, verbose = True)
trainer.trainOnDataset(dataset, 8000)
trainer.testOnData(verbose = True)
Nach meinem Neural Network Training, wenn ich es bin Prüfung auf Trainingsdaten, sein immer einen einzigen Ausgang für alle Eingänge zu geben. Wie:
Testing on data:
out: [ 0.075]
correct: [ 1.000]
error: 0.42767858
out: [ 0.075]
correct: [ 0.000]
error: 0.00283875
out: [ 0.075]
correct: [ 1.000]
error: 0.42744569
out: [ 0.077]
correct: [ 1.000]
error: 0.42616996
out: [ 0.076]
correct: [ 0.000]
error: 0.00291185
out: [ 0.076]
correct: [ 1.000]
error: 0.42664586
out: [ 0.075]
correct: [ 1.000]
error: 0.42800026
out: [ 0.076]
correct: [ 1.000]
error: 0.42719380
out: [ 0.076]
correct: [ 0.000]
error: 0.00286796
out: [ 0.076]
correct: [ 0.000]
error: 0.00286642
out: [ 0.076]
correct: [ 1.000]
error: 0.42696969
out: [ 0.076]
correct: [ 0.000]
error: 0.00292401
out: [ 0.074]
correct: [ 0.000]
error: 0.00274975
out: [ 0.076]
correct: [ 0.000]
error: 0.00286129
ich versucht habe zu verändern learningRate, weightDecay, Impuls, die Anzahl der versteckten Einheiten, die Anzahl der verborgenen Schichten, Klasse von versteckten Schichten, Klasse von Ausgangsschichten, um es zu lösen, aber in jedem Fall gibt es gleiches Ausgabe für jeden Eingang, wenn die Eingabe von Trainingsdaten kommt.
Ich denke, ich sollte es mehr als 8000 mal laufen, denn als ich Neural Network für 'XOR' baute, dauerte es mindestens 700 Iterationen, bevor es begann, Fehler im Nanobereich zu geben. Die Trainingsdatengröße auf 'XOR' war nur 4, während es in diesem Fall 892 war. Also habe ich 8000 Iterationen auf 10% der Originaldaten ausgeführt (jetzt Größe der Trainingsdaten ist 89), selbst dann gab es dieselbe Ausgabe für jede Eingabe in Trainingsdaten. Und da ich die Eingabe in '0' oder '1' klassifizieren möchte, wenn ich die Klasse der Ausgabeschicht als Softmax benutze, gibt sie immer '1' als Ausgabe aus.
Egal welche Konfiguration (Anzahl der versteckten Einheiten, Klasse der Ausgabeschicht, Lernrate, Klasse der versteckten Ebene, Impuls), ich habe in 'XOR' mehr oder weniger angefangen, in jedem Fall zu konvergieren.
Es ist möglich, dass es eine Konfiguration gibt, die zu niedrigeren Fehlerraten führt. Einige Konfiguration, damit es nicht für alle Eingaben in Trainingsdaten dieselbe Ausgabe gibt.
Ich lief es für 80.000 Iteration (Training Datengröße ist 89). Ausgabe-Beispiel:
Testing on data:
out: [ 0.340]
correct: [ 0.000]
error: 0.05772102
out: [ 0.399]
correct: [ 0.000]
error: 0.07954010
out: [ 0.478]
correct: [ 1.000]
error: 0.13600274
out: [ 0.347]
correct: [ 0.000]
error: 0.06013008
out: [ 0.500]
correct: [ 0.000]
error: 0.12497886
out: [ 0.468]
correct: [ 1.000]
error: 0.14177601
out: [ 0.377]
correct: [ 0.000]
error: 0.07112816
out: [ 0.349]
correct: [ 0.000]
error: 0.06100758
out: [ 0.380]
correct: [ 1.000]
error: 0.19237095
out: [ 0.362]
correct: [ 0.000]
error: 0.06557341
out: [ 0.335]
correct: [ 0.000]
error: 0.05607577
out: [ 0.381]
correct: [ 0.000]
error: 0.07247926
out: [ 0.355]
correct: [ 1.000]
error: 0.20832669
out: [ 0.382]
correct: [ 1.000]
error: 0.19116165
out: [ 0.440]
correct: [ 0.000]
error: 0.09663233
out: [ 0.336]
correct: [ 0.000]
error: 0.05632861
Durchschnittliche Fehler: 0,112558819082
('Max-Fehler:', ,21803000849096299 'Median-Fehler:', 0,096632332865968451)
Es gibt alle Ausgänge in Reichweite (0,33, 0,5) .
Warum nicht der gemeldete Fehler Match | out-correct |? Haben Sie auch schon mehr als 8000 Iterationen trainiert? Wie viele verdeckte Knoten haben Sie probiert? – Junuxx
Ich habe 2 versteckte Ebenen mit jeweils 11 Knoten ausprobiert. Es funktionierte nicht bis zu 8000 Iterationen. Im Moment benutze ich 2 versteckte Ebenen mit 9 und 7 Knoten und laufe 80.000 Iterationen, es läuft seit ungefähr 3 Stunden, wird Ergebnisse berichten, sobald es abgeschlossen ist, obwohl ich Total Error betrachte, glaube ich nicht wirklich, dass es sein wird etwas besser. Es tut mir leid, ich habe keine Ahnung, warum der gemeldete Fehler nicht mit | out-correct | übereinstimmt. –
Ich habe die Frage mit den Ergebnissen der Ausführung für 80.000 Iteration aktualisiert. –