web-dev-qa-db-fra.com

Keras arrêt précoce

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?

72
AizuddinAzman

early stopping

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;

  1. Surveillez la perte de validation (nécessité d'utiliser la validation croisée ou au moins train/ensembles de test) en définissant l'argument monitor sur 'val_loss'.
  2. 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.
  3. L'argument 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.
  4. verbose décide quoi imprimer, laissez le paramètre par défaut (0).
  5. L'argument 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.

120
umutto