Je forme un réseau de neurones pour mon projet en utilisant Keras. Keras a fourni une fonction pour un arrêt précoce. Puis-je savoir quels paramètres doivent être respectés pour éviter mon réseau neuronal de sur-adapter en utilisant un arrêt précoce?
Un arrêt précoce consiste essentiellement à arrêter la formation lorsque votre perte commence à augmenter (ou, en d'autres termes, la précision de la validation commence à diminuer). Selon 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 les sur-ajustements, je les utiliserais;
monitor
sur 'val_loss'
.min_delta
est un seuil permettant de quantifier ou non une perte à une époque donnée. Si la différence de perte est inférieure à min_delta
, elle est quantifiée comme aucune amélioration. Mieux vaut laisser la valeur 0 car nous nous intéressons au moment où la perte empire.patience
représente le nombre d'époques avant de vous arrêter une fois que votre 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 taux d’apprentissage élevé votre perte en zig-zag (la précision sera plus bruyante), il est donc préférable de définir un grand argument patience
. Si vous utilisez des lots importants et un taux d’apprentissage faible , votre perte sera plus lisse afin que vous puissiez utiliser un argument plus petit patience
. De toute façon, je le laisserai à 2 pour donner plus de chance au modèle.verbose
décide quoi imprimer, laissez le paramètre par défaut (0).mode
dépend de la direction que prend votre quantité contrôlée (est-elle supposée diminuer ou augmenter), puisque nous surveillons la perte, nous pouvons utiliser min
. Mais laissons kera nous en occuper et définissons-le sur auto
Je voudrais donc utiliser quelque chose comme ceci et expérimenter 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')
Pour éviter toute ambiguïté sur le fonctionnement des rappels, je vais essayer d'expliquer davantage. Une fois que vous avez appelé fit(... callbacks=[es])
sur votre modèle, Keras appelle des fonctions prédéterminées d'objets de rappel. 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 à arrêt précoce est appelé à chaque fin d’époque, compare la meilleure valeur surveillée à la valeur actuelle et s’arrête si les conditions sont remplies (nombre d’époques écoulées depuis l’observation de la meilleure valeur surveillée et s’agit-il de plus que de La dernière valeur est plus grande que min_delta, etc.).
Comme l'a souligné @BrentFaust dans les commentaires, la formation du modèle se poursuivra jusqu'à ce que les conditions d'arrêt précoce soient remplies ou que le paramètre epochs
(défaut = 10) dans fit()
soit satisfait. Le fait de définir un rappel d’arrêt précoce ne fera pas que le modèle s’entraîne au-delà de son paramètre epochs
. Donc, appeler la fonction fit()
avec une plus grande valeur epochs
bénéficierait davantage du rappel de l'arrêt précoce.