Ich schrieb mein erstes neuronales Feed-Forward-Netzwerk in C mit dem Sigmoid 1.0/(1.0 + exp(-x))
als Aktivierungsfunktion und Gradientenabstieg, um die Gewichte anzupassen. Ich habe versucht, sin(x)
anzunähern, um sicherzustellen, dass mein Netzwerk funktioniert. Allerdings scheint die Ausgabe des Neurons auf der Ausgabeschicht immer zwischen den Extremwerten 0 und 1 zu oszillieren und die Gewichte der Neuronen wachsen zu absurden Größen, egal wie viele verborgene Schichten es gibt, wie viele Neuronen sich in der versteckten Schicht befinden (s), wie viele Trainingsbeispiele ich anbiete oder was die Zielwerte sind.Nicht konvergierendes neuronales Netzwerk in C
1) Gibt es "bewährte" Standarddatensätze, um neuronale Netze auf Fehler zu überprüfen? Wenn ja, welche Strukturen funktionieren am besten (z. B. Anzahl von Neuronen in der verborgenen Schicht), um zu der gewünschten Ausgabe zu konvergieren?
2) Gibt es häufige Fehler, die die gleichen Symptome erzeugen? Ich fand this thread, aber das Problem war wegen fehlerhafter Daten, die ich glaube, ist nicht mein Fall.
3) Gibt es eine bevorzugte Möglichkeit, das Netzwerk zu trainieren? In meiner Implementierung durchlaufe ich die Trainingssätze und stelle die Gewichte jedes Mal auf, spüle dann ab und wiederhole ~ 1000 mal. Gibt es eine andere Reihenfolge, die besser funktioniert?
Was ist Ihre letzte Aktivierungsfunktion? Ist es auch Sigmoid? Dann könnten Sie Probleme mit der Tatsache haben, dass die Sünde negativ sein könnte. –
@ MarcinMożejko Um klar zu sein, nahm ich nur 50 zufällige reelle Zahlen zwischen 0 und 1 und verwendete die sin (x) von jedem als Ausgabeziel. Also die Zahlen sind alle positiv und zwischen 0 und 1. Ich bin mir auch nicht sicher, was Sie mit der endgültigen Aktivierungsfunktion meinen? –
Die endgültige Aktivierung ist eine Aktivierungsfunktion in der letzten Schicht. Ok - Was waren deine Lernraten und die verlorene Funktion für diese Aufgabe? Hast du MSE benutzt? –