Ich habe die folgende Backpropagation-Routine für ein neuronales Netzwerk geschrieben, indem ich den Code hier als Beispiel verwende. Das Problem, mit dem ich konfrontiert bin, verwirrt mich und hat meine Debugging-Fähigkeiten an ihre Grenzen gebracht.
Das Problem, vor dem ich stehe, ist ziemlich einfach: Während das neuronale Netzwerk trainiert, werden seine Gewichte auf null trainiert, ohne dass die Genauigkeit zunimmt.
Ich habe versucht, es mehrmals zu beheben, indem ich Folgendes überprüft habe:
Einige Informationen:
Ich bin mir nicht sicher, wohin ich von hier aus gehen soll. Ich habe überprüft, dass alle Dinge, die ich überprüfen kann, korrekt funktionieren, und es funktioniert immer noch nicht, also frage ich hier. Der folgende Code ist der Code, den ich für die Rückpropagierung verwende:
%Vor% Nach dem Vorschlag von Shep habe ich überprüft, was passiert, wenn ich ein Netzwerk mit der Form [2, 1, 1]
trainiere, um immer 1 auszugeben, und in diesem Fall trainiert das Netzwerk richtig. Meine beste Vermutung an diesem Punkt ist, dass der Gradient sich zu stark für die Nullen und schwach auf den Nullen einstellt, was zu einer Nettoabnahme trotz eines Anstiegs bei jedem Schritt führt - aber ich bin mir nicht sicher.
Ich nehme an, Ihr Problem besteht in der Wahl der Anfangsgewichte und in der Wahl der Initialisierung des Gewichtungsalgorithmus. Jeff Heaton Autor von Encog behauptet, dass es in der Regel schlechter abschneidet als andere Initialisierungsmethoden. Hier sind weitere Ergebnisse der Gewichtungsinitialisierungsalgorithmus-Leistung. Auch aus eigener Erfahrung empfehlen wir Ihnen, Ihre Gewichte mit unterschiedlichen Vorzeichenwerten zu initiieren. Selbst in Fällen, in denen ich alle positiven Ergebnisse hatte, wurden Gewichte mit verschiedenen Zeichen besser als mit dem gleichen Vorzeichen.
Tags und Links python neural-network backpropagation