L'arrêt précoce consiste à arrêter l'entraînement dès que les pertes commencent à augmenter (ou, en d'autres termes, que la précision de la validation commence à diminuer). Selon le documents il est utilisé comme suit ;
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
Les valeurs dépendent de votre implémentation (problème, taille du lot etc...) mais généralement pour éviter l'overfitting j'utiliserais ;
- Contrôlez la perte de validation (il faut utiliser la validation ou au moins des ensembles train/test) en définissant l'option
monitor
argument pour 'val_loss'
.
-
min_delta
est un seuil permettant de quantifier une perte à une certaine époque comme une amélioration ou non. Si la différence de perte est inférieure à min_delta
il est quantifié comme une absence d'amélioration. Il est préférable de le laisser à 0 puisque nous nous intéressons à quand la perte devient pire.
-
patience
représente le nombre d'époques avant de s'arrêter lorsque la perte commence à augmenter (cesse de s'améliorer). Cela dépend de votre implémentation, si vous utilisez de très petits lots ou un un taux d'apprentissage élevé votre perte zig-zag (la précision sera plus bruyante), il est donc préférable de fixer une large patience
argument. Si vous utilisez de grands lots et un petit taux d'apprentissage votre perte sera plus douce et vous pourrez utiliser un plus petit patience
argument. Quoi qu'il en soit, je le laisserai à 2 pour donner plus de chance au modèle. donner plus de chance au modèle.
-
verbose
décide de ce qu'il faut imprimer, laissez-le à la valeur par défaut (0).
-
mode
L'argument dépend de la direction dans laquelle votre quantité contrôlée (est-elle censée diminuer ou augmenter), puisque nous surveillons la perte, nous pouvons utiliser la fonction min
. Mais laissons keras s'en charger pour nous et définissons la valeur auto
J'utiliserais donc quelque chose comme ça et j'expérimenterais en traçant la perte d'erreur avec et sans arrêt précoce.
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
En cas d'ambiguïté sur le fonctionnement des callbacks, je vais essayer d'expliquer davantage. Une fois que vous appelez fit(... callbacks=[es])
sur votre modèle, Keras appelle des objets de rappel donnés des fonctions prédéterminées. Ces fonctions peuvent être appelées on_train_begin
, on_train_end
, on_epoch_begin
, on_epoch_end
et on_batch_begin
, on_batch_end
. Le rappel d'arrêt anticipé est appelé à chaque fin d'époque, compare la meilleure valeur surveillée avec la valeur actuelle et s'arrête si les conditions sont remplies (combien d'époques se sont écoulées depuis l'observation de la meilleure valeur surveillée et est-elle supérieure à l'argument de la patience, la différence entre la dernière valeur est supérieure à min_delta, etc.)
Comme l'a souligné @BrentFaust dans les commentaires, l'entraînement du modèle se poursuivra jusqu'à ce que les conditions d'arrêt anticipé soient remplies ou que les conditions d'arrêt soient remplies. epochs
(par défaut=10) dans fit()
est satisfaite. L'activation d'une fonction d'appel d'arrêt anticipé n'obligera pas le modèle à s'entraîner au-delà de sa limite de temps. epochs
paramètre. Ainsi, l'appel fit()
avec une fonction epochs
bénéficierait davantage du rappel de l'arrêt anticipé.