Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Surveiller la progression de l'apprentissage du Deep Learning

Cet exemple montre comment surveiller le processus d’apprentissage des réseaux de Deep Learning.

Lorsque vous entraînez des réseaux pour le Deep Learning, il est souvent utile de surveiller la progression de l’apprentissage. En réalisant des tracés de diverses métriques pendant l’apprentissage, vous pouvez savoir comment progresse l’apprentissage. Par exemple, vous pouvez déterminer si la précision du réseau s’améliore et dans quelle mesure, et si le réseau commence à provoquer un surajustement des données d’apprentissage.

Cet exemple montre comment surveiller la progression de l’apprentissage pour des réseaux entraînés avec la fonction trainNetwork. Pour des réseaux entraînés avec une boucle d’apprentissage personnalisée, utilisez un objet trainingProgressMonitor pour tracer les métriques pendant l’apprentissage. Pour plus d’informations, veuillez consulter Monitor Custom Training Loop Progress.

Lorsque vous définissez l’option d’apprentissage Plots à "training-progress" dans trainingOptions et commencez l’apprentissage d’un réseau, trainNetwork crée une figure et affiche les métriques à chaque itération. Chaque itération est une estimation du gradient et une mise à jour des paramètres du réseau. Si vous spécifiez des données de validation dans trainingOptions, la figure montre les métriques de validation chaque fois que trainNetwork valide le réseau. La figure trace les éléments suivants :

  • Précision de l’apprentissage — Précision de la classification sur chaque mini-batch individuel.

  • Précision lissée de l’apprentissage — Précision lissée de l’apprentissage, obtenue en appliquant un algorithme de lissage à la précision de l’apprentissage. Elle présente moins de bruit que la précision non lissée, ce qui permet de repérer plus facilement des tendances.

  • Précision de la validation — Précision de la classification sur l’ensemble du jeu de validation (spécifié avec trainingOptions).

  • Perte de l’apprentissage, perte lissée de l’apprentissage et perte de la validation — La perte sur chaque mini-batch, sa version lissée et la perte sur le jeu de validation. Si la couche finale de votre réseau est une classificationLayer, la fonction de perte est la perte d’entropie croisée. Pour plus d’informations sur les fonctions de perte pour des problèmes de classification et de régression, veuillez consulter .

Pour les réseaux de régression, la figure trace la racine de l’erreur quadratique moyenne (RMSE) à la place de la précision.

La figure marque chaque Epoch d’apprentissage avec un arrière-plan ombré. Un epoch est un passage complet sur l’ensemble du jeu de données.

Pendant l’apprentissage, vous pouvez arrêter l’apprentissage et revenir à l’état actuel du réseau en cliquant sur le bouton dans le coin supérieur droit. Par exemple, vous pourriez vouloir arrêter l’apprentissage lorsque la précision du réseau atteint un plateau et qu’il est clair que la précision ne s’améliore plus. Une fois que vous avez cliqué sur le bouton d’arrêt, l’apprentissage peut prendre un certain temps pour s’achever. Une fois l’apprentissage terminé, trainNetwork renvoie le réseau entraîné.

Lorsque l’apprentissage est fini, affichez les Résultats montrant la précision de la validation finalisée et la raison pour laquelle l’apprentissage s’est terminé. Si l’option d’apprentissage OutputNetwork est "last-iteration" (par défaut), les métriques finalisées correspondent à la dernière itération de l’apprentissage. Si l’option d’apprentissage OutputNetwork est "best-validation-loss" (par défaut), les métriques finalisées correspondent à l’itération avec la plus petite perte de validation. L’itération à partir de laquelle les métriques de validation finales sont calculées est étiquetée Final dans les tracés.

Si votre réseau contient des couches de normalisation par batch, les métriques de validation finales peuvent être différentes des métriques de validation évaluées pendant l’apprentissage. En effet, les statistiques de moyenne et de variance utilisées pour la normalisation par batch peuvent être différentes une fois que l’apprentissage est terminé. Par exemple, si l’option d’apprentissage BatchNormalizationStatisics est "population", après l’apprentissage, le software finalise les statistiques de normalisation par batch en passant à nouveau par les données d’apprentissage et utilise la moyenne et la variance correspondantes. Si l’option d’apprentissage BatchNormalizationStatisics est "moving", le software approxime les statistiques pendant l’apprentissage en utilisant une estimation en continue et utilise les dernières valeurs des statistiques.

Des informations sur le temps et les paramètres d’apprentissage s’affichent à droite. Pour en savoir plus sur les options d’apprentissage, veuillez consulter Set Up Parameters and Train Convolutional Neural Network.

Pour enregistrer le tracé de la progression de l’apprentissage, cliquez sur Export Training Plot dans la fenêtre d’apprentissage. Vous pouvez enregistrer le tracé en tant que fichier PNG, JPEG, TIFF ou PDF. Vous pouvez également enregistrer les tracés individuels de perte, de précision et de racine de l’erreur quadratique moyenne avec la barre d’outils des axes.

Tracer la progression de l’apprentissage pendant l’apprentissage

Entraînez un réseau et tracez la progression de l’apprentissage pendant l’apprentissage.

Chargez les données d’apprentissage qui contiennent 5 000 images de chiffres. Réservez 1 000 images pour la validation du réseau.

[XTrain,YTrain] = digitTrain4DArrayData;

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

Construisez un réseau pour classer les images de chiffres.

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,Padding="same")
    batchNormalizationLayer
    reluLayer   
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,16,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Spécifiez les options pour l’apprentissage du réseau. Pour valider le réseau à intervalles réguliers pendant l’apprentissage, spécifiez les données de validation. Choisissez la valeur ValidationFrequency pour que le réseau soit validé environ une fois par epoch. Pour tracer la progression de l’apprentissage pendant l’apprentissage, définissez l’option d’apprentissage Plots à "training-progress".

options = trainingOptions("sgdm", ...
    MaxEpochs=8, ...
    ValidationData={XValidation,YValidation}, ...
    ValidationFrequency=30, ...
    Verbose=false, ...
    Plots="training-progress");

Entraînez le réseau.

net = trainNetwork(XTrain,YTrain,layers,options);

{"String":"Figure Training Progress (05-Nov-2022 09:56:03) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 15 objects of type patch, text, line. Axes object 2 contains 15 objects of type patch, text, line.","Tex":[],"LaTex":[]}

Voir aussi

|

Sujets associés