2016-05-31 8 views
0

Ich möchte ein neuronales Netzwerk trainieren, um eine Signalklassifizierung durchzuführen.Geeignete Backpropagation-Parameter

The network has 50 inputs of the format: [-1 .. 1]

50 hidden layers (not restricted)

10 outputs

hyperbolic tangent (not restricted)

Ich bin in der Bibliothek beschränkt (hnn), um die Ausbildung zu tun.

Mein Problem ist, dass ich weiß nicht, was die geeignet ist Lernrate und die Anzahl der Ausbildung Iterationen

ich viele mögliche Einstellungen im Bereich versucht:

[1K - 10K] training iterations

[0.001 - 1.5] learning rate

Aber wenn ich meine Trainingsdaten wieder in das trainierte neuronale Netzwerk einspeise, bekomme ich sehr schlechte Ergebnisse (in Form einer Konfusionsmatrix) - maximal 2 korrekt klassifizierte Klassen.

Was ist der geeignete Satz dieser beiden Parameter für die Eingabedaten?

Bei der Suche nach ähnlichen Fällen in der Literatur habe ich festgestellt, dass verschiedene Fälle unterschiedliche Parametereinstellungen verwenden, ohne die Argumentation wirklich zu erklären.


Experimente: Erwähnt Bibliothek hat eine Funktion trainUntilErrorBelow (selbsterklärend). Ich habe diese Funktion verwendet, um zu sehen, wie schnell ich einen bestimmten Fehler erreichen kann, indem ich die Aktivierungsfunktion und die Anzahl der versteckten Ebenen ändere.

Ich habe gewählt, um die folgenden:

minimum error: 300

learning rate: 0.01

Ergebnisse: Hyperbeltangens:

1 hidden layer (50 neurons) - 32.12 sec

2 hidden layers (50/50 neurons) - 31.51 sec

3 hidden layers (50/50/50 neurons) - 12.18 sec

4 hidden layers (50/50/50/50 neurons) - 42.28 sec

Sigmoid:

1 hidden layer (50 neurons) - 21.32 sec

2 hidden layers (50/50 neurons) - 274.29 sec

3 hidden layers (50/50/50 neurons) - ∞ sec

4 hidden layers (50/50/50/50 neurons) - ∞ sec

Ist es sinnvoll, dass die Tangenshyperbolicus Aktivierung assume Funktion mit 3 versteckten Schichten (50/50/50 ne Urons) ist eine gute Wahl für die Netzwerkarchitektur?

+1

Im Allgemeinen benötigen Sie Trial-and-Error für diese Hyper-Parameter. Dies ist der Grund für die Beobachtung einer großen Bandbreite in der Literatur. Ich bin mir ziemlich sicher, dass das Problem in Ihrem Fall nicht die Lernrate ist, sondern die Netzwerkarchitektur und vielleicht Ihr Datensatz. Wenn Sie bereits einige Lernraten ausprobiert haben, sollten Sie etwas Zeit in Bezug auf die Regelsetzung investieren. Ihr Netzwerk könnte die ganze Zeit überarbeiten. Fügen Sie Ihren Gewichtungen eine L1/L2-Regulierung hinzu oder sogar eine Dropout-Schicht. – sascha

+0

@sascha danke, versuche einige Experimente durchzuführen, um die richtigen Einstellungen für die Hyperparameter zu bestimmen –

+0

@MocialovBoris Wie Sascha sagte, sieht es eher wie ein Problem mit den zu klassifizierenden Daten aus. Zur Signalklassifizierung berechnen Sie normalerweise (oft;)) einige Merkmale aus den Signalen selbst (Mittelwert, Fourier-Transformation, Blah-Koeffizienten) und klassifizieren diese Merkmale dann. Die eine Sache hier ist, welche Eigenschaften du nimmst (Kunst mehr als Wissenschaft); die andere, mehr oder weniger eine Faustregel, um die Daten zu normalisieren, am häufigsten in [-1,1]. Was sind deine 50 Eingänge? Welche Art von Werten haben sie? Warum hast du 50 Ausgangsknoten (du hast 10 schon erwähnt)? – Luis

Antwort

0

(Wurde als Kommentar gedacht, bekam aber zu groß: P)

Ich denke, dass ein sehr nützliches Werkzeug, hier am learning curves zu sehen wäre, um zu sehen, ob die Gewichte bewegen (Sie eine Kurve sehen sollen "Da runter wie die blaue da. Von dort aus kann man mit den Parametern spielen. Dinge zum Nachdenken: Die Lernrate kann zu groß sein oder zu niedrig, bedeutet, dass die Änderungen in den Gewichten jeweils groß oder klein wären Iteration: Ersteres kann zu nicht Konvergenz führen, letzteres zu langsamer Konvergenz Wenn sich die Gewichte zu stark ändern, dann können Sie einige schöne Fehlerminima verpassen. In jedem Fall werden Ihnen die Plots definitiv helfen einige Hinweise auf das, was vor sich geht. Dies gilt auch für das Momentum (wenn du es benutzt): manchmal gibst du dort einen zu großen Wert und die Gewichte gewinnen an Schwung und verpassen auch die Minima.

Trainings-Iterationen: Ich trainiere immer 200 bis 500 Epochen und schaue mir die Lernplots an.Wenn ich mich für eine bestimmte Konfiguration entscheide, trainiere ich für viele (10.000) Epochen, gehe etwas essen und schaue mir nochmal die Plots an, um zu überprüfen, ob es während meiner Abwesenheit nichts komisches gibt;) Die meiste Zeit Ich sehe wenig Veränderung nach der Epoche 1000 (zumindest bleibt der Trend im gleichen Tempo zurück).

Ein weiterer Kommentar (mit aller gebotenen Vorsicht): Ich kenne dein Problem nicht, aber ich habe immer nur 1 versteckte Eingabe verwendet und es funktioniert. Hier sehe ich einige Änderungen in der Anzahl der versteckten Knoten, was ein Problem für sich ist. Beim ersten Versuch gehe ich meistens mit num_hidden = num_inputs. Ich würde demütig vorschlagen, zuerst mit kleineren, einfacheren Netzwerken zu suchen. ;)