2016-05-05 12 views
7

Ich benutze mxnet, um einen 11-Klassen-Bildklassifizierer zu trainieren. Ich beobachte ein seltsames Verhalten, die Trainingsgenauigkeit nahm langsam zu und ging bis zu 39% und in der nächsten Zeit ging es auf 9% zurück und dann bleibt es für den Rest des Trainings nahe bei 9%. Ich startete das Training mit gespeichertem Modell (mit 39% Trainingsgenauigkeit) und behielt alle anderen Parameter bei. Jetzt nimmt die Trainingsgenauigkeit wieder zu. Was kann der Grund hier sein? Ich kann das nicht verstehen. Und es wird schwierig, das Modell auf diese Weise zu trainieren, da es erfordert, dass ich ständig Trainingsgenauigkeitswerte sehe.Plötzlicher Abfall der Genauigkeit beim Training eines tiefen neuronalen Netzes

Lernrate ist konstant bei 0,01

+0

Wahrscheinlich ist Ihre Lernrate zu hoch und das Modell springt herum. Schwer zu sagen, ohne zu wissen, Ihre Hyperparameter – fabrizioM

+0

Lernrate in 0,01 – sau

+0

Sobald ich ähnliche Problem hatte, wenn ich zufällig eine lineare Aktivierung und verwendet kategorische Kreuz-Entropie als Kostenfunktion. –

Antwort

7

, wie Sie Ihre späte Genauigkeit ist in der Nähe von zufällig man sehen können. In dieser Art von Fällen gibt es zwei häufige Probleme.

  • Ihre Lernrate ist hoch. versuchen Sie es zu senken
  • Der Fehler (oder die Entropie), den Sie versuchen zu verwenden, gibt Ihnen NaN-Wert. Wenn Sie versuchen, Entropien mit Log-Funktionen zu verwenden, müssen Sie sie genau verwenden.
-2

Es geschah wahrscheinlich, weil 0log0 NaN zurückgibt.

Sie könnten es vermeiden, indem Sie;

cross_entropy = -tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0)))

+0

Sie sollten den Gradienten nicht einschränken, indem Sie den Verlust begrenzen, indem Sie die Logits beschneiden. Dies erzeugt in diesen Intervallen einen Gradienten von 0 und das Netzwerk bleibt stecken. Sie sollten stattdessen direkt den Farbverlauf abschneiden. –

1

Es ist während der Ausbildung von neuronalen Netzen für Genauigkeit gemeinsam für eine Weile zu verbessern und dann noch schlimmer - in der Regel dies durch Überanpassung verursacht wird. Es ist auch ziemlich üblich, dass das Netzwerk "unglücklich" wird und in einen schlechten Teil des Parameterraums gebracht wird, der einer plötzlichen Abnahme der Genauigkeit entspricht - manchmal kann es sich schnell davon erholen, aber manchmal nicht.

Im Allgemeinen ist eine Senkung Ihrer Lernrate ein guter Ansatz für diese Art von Problem. Außerdem kann das Festlegen eines Lernratenplans wie FactorScheduler Ihnen dabei helfen, eine stabilere Konvergenz zu erreichen, indem Sie die Lernrate alle paar Epochen senken. Tatsächlich kann dies manchmal Fehler bei der Auswahl einer zu hohen anfänglichen Lernrate verdecken.

0

Ich konfrontiert das gleiche Problem.Und ich löste es durch Verwendung (y-a)^eine Verlustfunktion anstelle der Kreuz-Entropie-Funktion (wegen log (0)). Ich hoffe, es gibt bessere Lösung für dieses Problem.

Verwandte Themen