webentwicklung-frage-antwort-db.com.de

Keras frühes Stoppen

Ich trainiere ein neuronales Netzwerk für mein Projekt mit Keras. Keras hat eine Funktion zum vorzeitigen Anhalten bereitgestellt. Darf ich wissen, welche Parameter zu beachten sind, um eine Überanpassung meines neuronalen Netzes durch frühzeitiges Stoppen zu vermeiden?

72
AizuddinAzman

early stopping

Frühes Anhalten bedeutet im Grunde, das Training anzuhalten, sobald Ihr Verlust zuzunehmen beginnt (oder mit anderen Worten, die Validierungsgenauigkeit zu sinken beginnt). Gemäß Dokumente wird es wie folgt verwendet;

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=0,
                              verbose=0, mode='auto')

Die Werte hängen von Ihrer Implementierung ab (Problem, Losgröße usw.), aber im Allgemeinen würde ich eine Überanpassung verwenden, um eine Überanpassung zu verhindern.

  1. Überwachen Sie den Validierungsverlust (Kreuzvalidierung oder mindestens Zug-/Testsätze erforderlich), indem Sie das Argument monitor auf 'val_loss' Setzen.
  2. min_delta Gibt an, ob ein Verlust in einer bestimmten Epoche als Verbesserung quantifiziert werden soll oder nicht. Liegt die Verlustdifferenz unter min_delta, Wird dies als keine Verbesserung quantifiziert. Es ist besser, es als 0 zu belassen, da wir daran interessiert sind, wann der Verlust schlimmer wird.
  3. Das Argument patience gibt die Anzahl der Epochen vor dem Anhalten an, sobald Ihr Verlust zuzunehmen beginnt (sich nicht mehr zu verbessern). Dies hängt von Ihrer Implementierung ab, wenn Sie sehr kleine Stapel oder große Lernrate Ihren Verlust Zick-Zack ( Genauigkeit ist verrauscht), setzen Sie besser ein großes patience Argument. Wenn Sie große Mengen und eine kleine Lernrate verwenden, wird Ihr Verlust glatter, sodass Sie ein kleineres patience-Argument verwenden können. In beiden Fällen belasse ich es bei 2, um dem Modell mehr Chancen zu geben.
  4. verbose legt fest, was gedruckt werden soll, belassen Sie die Standardeinstellung (0).
  5. Das Argument mode hängt von der Richtung ab, in die Ihre überwachte Menge weist (soll es abnehmen oder zunehmen), da wir den Verlust überwachen, können wir min verwenden. Aber lassen wir Keras das für uns erledigen und setzen das auf auto

Also würde ich so etwas verwenden und experimentieren, indem ich den Fehlerverlust mit und ohne frühes Anhalten aufzeichne.

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=2,
                              verbose=0, mode='auto')

Wegen möglicher Unklarheiten bezüglich der Funktionsweise von Rückrufen werde ich versuchen, mehr zu erklären. Sobald Sie fit(... callbacks=[es]) in Ihrem Modell aufrufen, ruft Keras bestimmte, von Callback-Objekten vorgegebene Funktionen auf. Diese Funktionen können als on_train_begin, on_train_end, on_Epoch_begin, on_Epoch_end Und on_batch_begin, on_batch_end Bezeichnet werden. Der Rückruf zum vorzeitigen Stoppen wird an jedem Ende der Epoche aufgerufen, vergleicht den besten überwachten Wert mit dem aktuellen und stoppt, wenn die Bedingungen erfüllt sind (wie viele Epochen sind seit der Beobachtung des besten überwachten Werts vergangen, und ist dies mehr als ein Geduldargument, der Unterschied zwischen letzter Wert ist größer als min_delta etc ..).

Wie in den Kommentaren von @BrentFaust angegeben, wird das Training des Modells fortgesetzt, bis entweder die Bedingungen für das frühe Anhalten erfüllt sind oder der Parameter epochs (Standard = 10) in fit() erfüllt ist. Durch das Festlegen eines Rückrufs für vorzeitiges Stoppen wird das Modell nicht über den Parameter epochs hinaus trainiert. Das Aufrufen der Funktion fit() mit einem größeren Wert epochs würde also mehr vom Rückruf für frühzeitiges Stoppen profitieren.

120
umutto