La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.
trainingOptions
Options d’un réseau de neurones d’apprentissage pour le Deep Learning
Description
renvoie les options d’apprentissage de l’optimisation spécifiée par options
= trainingOptions(solverName
)solverName
. Pour entraîner un réseau, utilisez les options d’apprentissage comme argument d’entrée de la fonction trainNetwork
.
renvoie des options d’apprentissage avec des options complémentaires spécifiées par un ou plusieurs arguments nom-valeur.options
= trainingOptions(solverName
,Name=Value
)
Exemples
Spécifier les options d’apprentissage
Créez un jeu d’options pour l’apprentissage d’un réseau avec une descente de gradient stochastique avec momentum. Réduisez le taux d’apprentissage d’un facteur de 0,2 tous les 5 epochs. Définissez un nombre maximal d’epochs pour l’apprentissage de 20 et utilisez un mini-batch avec 64 observations à chaque itération. Activez le tracé de la progression de l’apprentissage.
options = trainingOptions("sgdm", ... LearnRateSchedule="piecewise", ... LearnRateDropFactor=0.2, ... LearnRateDropPeriod=5, ... MaxEpochs=20, ... MiniBatchSize=64, ... Plots="training-progress")
options = TrainingOptionsSGDM with properties: Momentum: 0.9000 InitialLearnRate: 0.0100 LearnRateSchedule: 'piecewise' LearnRateDropFactor: 0.2000 LearnRateDropPeriod: 5 L2Regularization: 1.0000e-04 GradientThresholdMethod: 'l2norm' GradientThreshold: Inf MaxEpochs: 20 MiniBatchSize: 64 Verbose: 1 VerboseFrequency: 50 ValidationData: [] ValidationFrequency: 50 ValidationPatience: Inf Shuffle: 'once' CheckpointPath: '' CheckpointFrequency: 1 CheckpointFrequencyUnit: 'epoch' ExecutionEnvironment: 'auto' WorkerLoad: [] OutputFcn: [] Plots: 'training-progress' SequenceLength: 'longest' SequencePaddingValue: 0 SequencePaddingDirection: 'right' DispatchInBackground: 0 ResetInputNormalization: 1 BatchNormalizationStatistics: 'population' OutputNetwork: 'last-iteration'
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 Output Layers.
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);
Arguments d'entrée
solverName
— Solveur pour réseau d’apprentissage
'sgdm'
| 'rmsprop'
| 'adam'
Solveur pour réseau d’apprentissage, spécifié comme un des éléments suivants :
'sgdm'
— Utiliser l’optimisation de la descente de gradient stochastique avec momentum (SGDM). Vous pouvez spécifier la valeur du momentum avec l’option d’apprentissageMomentum
.'rmsprop'
— Utiliser l’optimisation RMSProp. Vous pouvez spécifier le taux de décroissance de la moyenne mobile du gradient au carré avec l’option d’apprentissageSquaredGradientDecayFactor
.'adam'
— Utiliser l’optimisation Adam. Vous pouvez spécifier les taux de décroissance des moyennes mobiles du gradient au carré avec les options d’apprentissageGradientDecayFactor
etSquaredGradientDecayFactor
.
Pour plus d’informations sur les différents solveurs, veuillez consulter Descente de gradient stochastique.
Arguments nom-valeur
Spécifiez des paires d’arguments en option selon le modèle Name1=Value1,...,NameN=ValueN
, où Name
est le nom de l’argument et Value
est la valeur correspondante. Les arguments nom-valeur doivent apparaître après les autres arguments, mais l’ordre des paires n’a aucune importance.
Avant R2021a, utilisez des virgules pour séparer les noms et les valeurs, et mettez Name
entre guillemets.
Exemple : InitialLearnRate=0.03,L2Regularization=0.0005,LearnRateSchedule="piecewise"
spécifie le taux d’apprentissage initial à 0,03 et le facteur de régularisation L2
à 0,0005, et indique au software de réduire le taux d’apprentissage après un nombre d’epochs donné en le multipliant par un certain facteur.
Plots
— Tracés à afficher pendant l’apprentissage d’un réseau
'none'
| 'training-progress'
Tracés à afficher pendant l’apprentissage d’un réseau peut être spécifier selon les options suivantes :
'none'
— Ne pas afficher de tracés pendant l’apprentissage.'training-progress'
— Tracer la progression de l'apprentissage. Le tracé montre la perte et la précision des mini-batchs, la perte et la précision de la validation et des informations complémentaires sur la progression de l’apprentissage. Le tracé dispose d’un bouton d’arrêt dans le coin supérieur droit. Cliquez sur le bouton pour arrêter l’apprentissage et revenir à l’état actuel du réseau. Vous pouvez enregistrer le tracé d’apprentissage en tant qu’image ou PDF en cliquant sur Export Training Plot. Pour plus d’informations sur le tracé de la progression de l’apprentissage, veuillez consulter Surveiller la progression de l'apprentissage du Deep Learning.
Verbose
— Indicateur pour l’affichage des informations de la progression de l’apprentissage
1
(vrai) (par défaut) | 0
(faux)
Indicateur pour l’affichage des informations de la progression de l’apprentissage dans la fenêtre de commande, spécifié comme 1
(vrai) ou 0
(faux).
La sortie en clair affiche les informations suivantes :
Réseaux de classification
Champ | Description |
---|---|
Epoch | Nombre d’epochs. Un epoch correspond à un passage complet sur les données. |
Iteration | Nombre d’itérations. Une itération correspond à un mini-batch. |
Time Elapsed | Temps écoulé en heures, minutes et secondes. |
Mini-batch Accuracy | Précision de la classification sur le mini-batch. |
Validation Accuracy | Précision de la classification sur les données de validation. Si vous ne spécifiez pas de données de validation, la fonction n’affiche pas ce champ. |
Mini-batch Loss | Perte sur le mini-batch. Si la couche de sortie est un objet ClassificationOutputLayer , alors la perte est la perte d’entropie croisée pour des problèmes de classification multiclasses avec des classes mutuellement exclusives. |
Validation Loss | Perte sur les données de validation. Si la couche de sortie est un objet ClassificationOutputLayer , alors la perte est la perte d’entropie croisée pour des problèmes de classification multiclasses avec des classes mutuellement exclusives. Si vous ne spécifiez pas de données de validation, la fonction n’affiche pas ce champ. |
Base Learning Rate | Taux d’apprentissage de base. Le software multiplie les facteurs de taux d’apprentissage des couches par cette valeur. |
Réseaux de régression
Champ | Description |
---|---|
Epoch | Nombre d’epochs. Un epoch correspond à un passage complet sur les données. |
Iteration | Nombre d’itérations. Une itération correspond à un mini-batch. |
Time Elapsed | Temps écoulé en heures, minutes et secondes. |
Mini-batch RMSE | Racine de l’erreur quadratique moyenne (RMSE) sur le mini-batch. |
Validation RMSE | RMSE sur les données de validation. Si vous ne spécifiez pas de données de validation, le software n’affiche pas ce champ. |
Mini-batch Loss | Perte sur le mini-batch. Si la couche de sortie est un objet RegressionOutputLayer , alors la perte est la demi-erreur quadratique moyenne. |
Validation Loss | Perte sur les données de validation. Si la couche de sortie est un objet RegressionOutputLayer , alors la perte est la demi-erreur quadratique moyenne. Si vous ne spécifiez pas de données de validation, le software n’affiche pas ce champ. |
Base Learning Rate | Taux d’apprentissage de base. Le software multiplie les facteurs de taux d’apprentissage des couches par cette valeur. |
Si l’apprentissage s’arrête, la sortie en clair (verbose) affiche la raison de l’arrêt.
Pour spécifier les données de validation, utilisez l’option d’apprentissage ValidationData
.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
VerboseFrequency
— Fréquence de l’impression en clair (verbose)
50
(par défaut) | entier positif
La fréquence de l’impression en clair, qui est le nombre d’itérations entre les impressions dans la fenêtre de commande, est spécifiée comme un entier positif. Cette option a un effet uniquement si l’option d’apprentissage Verbose
est 1
(vrai).
Si vous validez le réseau pendant l’apprentissage, trainNetwork
imprime également dans la fenêtre de commande à chaque validation.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
MaxEpochs
— Nombre maximal d’epochs
30
(par défaut) | entier positif
Le nombre maximal d’epochs à utiliser pour l’apprentissage est spécifié comme un entier positif.
Une itération est une étape de l’algorithme de descente de gradient destinée à minimiser la fonction de perte avec un mini-batch. Un epoch est le passage complet de l’algorithme d’apprentissage sur l’ensemble du jeu d’apprentissage.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
MiniBatchSize
— Taille du mini-batch
128
(par défaut) | entier positif
Taille du mini-batch à utiliser pour chaque itération d’apprentissage, spécifiée comme un entier positif. Un mini-batch est un sous-ensemble du jeu d’apprentissage qui est utilisé pour évaluer le gradient de la fonction de perte et mettre à jour les poids.
Si la taille du mini-batch ne divise pas uniformément le nombre d’échantillons d’apprentissage, trainNetwork
ignore les données d’apprentissage qui ne rentrent pas dans le mini-batch complet final de chaque epoch.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Shuffle
— Option de mélange des données
'once'
| 'never'
| 'every-epoch'
Option de mélange des données, spécifiée comme l’un des éléments suivants :
'once'
— Mélanger les données d’apprentissage et de validation une fois avant l’apprentissage.'never'
— Ne pas mélanger les données.'every-epoch'
— Mélanger les données d’apprentissage avant chaque epoch d’apprentissage et mélanger les données de validation avant chaque validation du réseau. Si la taille du mini-batch ne divise pas uniformément le nombre d’échantillons d’apprentissage,trainNetwork
ignore les données d’apprentissage qui ne rentrent pas dans le mini-batch complet final de chaque epoch. Pour éviter d’ignorer les mêmes données à chaque epoch, définissez l’option d’apprentissageShuffle
à'every-epoch'
.
ValidationData
— Données à utiliser pour la validation pendant l’apprentissage
[]
(par défaut) | datastore | table | cell array
Les données à utiliser pour la validation pendant l’apprentissage sont spécifiées en tant que []
, datastore, table ou cell array et contiennent les prédicteurs et les réponses de la validation.
Vous pouvez spécifier les prédicteurs et les réponses de la validation avec les formats supportés par la fonction trainNetwork
. Vous pouvez spécifier les données de validation comme un datastore, une table ou le cell array {predictors,responses}
, où predictors
contient les prédicteurs de la validation et responses
contient les réponses de la validation.
Pour plus d’informations, veuillez consulter les arguments d’entrée images
, sequences
et features
de la fonction trainNetwork
.
Pendant l’apprentissage, trainNetwork
calcule la précision et la perte sur les données de validation. Pour spécifier la fréquence de validation, utilisez l’option d’apprentissage ValidationFrequency
. Vous pouvez également utiliser les données de validation pour arrêter automatiquement l’apprentissage lorsque la perte de la validation cesse de décroître. Pour activer l’arrêt automatique de la validation, utiliser l’option d’apprentissage ValidationPatience
.
Si votre réseau possède des couches qui se comportent différemment entre la prédiction et l’apprentissage (par exemple des couches de décrochage), la précision de la validation peut être supérieure à la précision de l’apprentissage (mini-batch).
Les données de validation sont mélangées selon l’option d’apprentissage Shuffle
. Si Shuffle
est 'every-epoch'
, les données de validation sont mélangées avant chaque validation du réseau.
Si ValidationData
est []
, le software ne valide pas le réseau pendant l’apprentissage.
ValidationFrequency
— Fréquence de validation du réseau
50
(par défaut) | entier positif
La fréquence de validation du réseau en nombre d’itérations est spécifiée comme un entier positif.
La valeur ValidationFrequency
est le nombre d’itérations entre les évaluations des métriques de validation. Pour spécifier les données de validation, utilisez l’option d’apprentissage ValidationData
.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ValidationPatience
— Patience pour l’arrêt de la validation
Inf
(par défaut) | entier positif
La patience pour l’arrêt de la validation de l’apprentissage du réseau est spécifiée comme un entier positif ou Inf
.
ValidationPatience
spécifie le nombre de fois où la perte sur le jeu de validation peut être supérieure ou égale à la plus petite perte précédente avant que l’apprentissage du réseau s’arrête. Si ValidationPatience
est Inf
, les valeurs de la perte de validation n’entraîne pas l’arrêt précoce de l’apprentissage.
Le réseau renvoyé dépend de l’option d’apprentissage OutputNetwork
. Pour renvoyer le réseau avec la plus petite perte de validation, définissez l’option d’apprentissage OutputNetwork
à "best-validation-loss"
.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputNetwork
— Réseau à renvoyer lorsque l’apprentissage est terminé
'last-iteration'
(par défaut) | 'best-validation-loss'
Réseau à renvoyer lorsque l’apprentissage est terminé, spécifié comme l’un des éléments suivants :
'last-iteration'
– Renvoie le réseau correspondant à la dernière itération d’apprentissage.'best-validation-loss'
– Renvoie le réseau correspondant à l’itération d’apprentissage avec la plus petite perte de validation. Pour utiliser cette option, vous devez spécifier l’option d’apprentissageValidationData
.
InitialLearnRate
— Taux d’apprentissage initial
scalaire positif
Le taux d’apprentissage initial utilisé pour l’apprentissage est spécifié comme un scalaire positif.
La valeur par défaut est 0.01
pour le solveur 'sgdm'
et 0.001
pour les solveurs 'rmsprop'
et 'adam'
.
Si le taux d’apprentissage est trop faible, l’apprentissage peut prendre beaucoup de temps. Si le taux d’apprentissage est trop élevé, l’apprentissage peut atteindre un résultat sous-optimal ou diverger.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
LearnRateSchedule
— Option de réduction du taux d’apprentissage pendant l’apprentissage
'none'
(par défaut) | 'piecewise'
L'option de réduction du taux d’apprentissage pendant l’apprentissage est spécifiée comme l’un des éléments suivants :
'none'
— Le taux d’apprentissage reste constant pendant tout l’apprentissage.'piecewise'
— Le software met à jour le taux d’apprentissage après un certain nombre d’epochs en le multipliant par un certain facteur. Utilisez l’option d’apprentissageLearnRateDropFactor
pour spécifier la valeur de ce facteur. Utilisez l’option d’apprentissageLearnRateDropPeriod
pour spécifier le nombre d’epochs entre les multiplications.
LearnRateDropPeriod
— Nombre d’epochs pour la réduction du taux d’apprentissage
10
(par défaut) | entier positif
Le nombre d’epochs pour la réduction du taux d’apprentissage est spécifié en tant qu'un entier positif. Cette option est valide uniquement si l’option d’apprentissage LearnRateSchedule
est 'piecewise'
.
Le software multiplie le taux d’apprentissage global par le facteur de réduction chaque fois que le nombre spécifié d’epochs est atteint. Spécifiez le facteur de réduction avec l’option d’apprentissage LearnRateDropFactor
.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
LearnRateDropFactor
— Facteur pour la réduction du taux d’apprentissage
0.1
(par défaut) | scalaire entre 0
et 1
Le facteur pour la réduction du taux d’apprentissage est spécifié comme un scalaire compris entre 0
et 1
. Cette option est valide uniquement si l’option d’apprentissage LearnRateSchedule
est 'piecewise'
.
LearnRateDropFactor
est un facteur de multiplication à appliquer au taux d’apprentissage chaque fois qu’un certain nombre d’epochs est atteint. Spécifiez le nombre d’epochs avec l’option d’apprentissage LearnRateDropPeriod
.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
L2Regularization
— Facteur de régularisation L2
0.0001
(par défaut) | scalaire non négatif
Le facteur de régularisation L2 (décroissance du poids) est spécifié comme un scalaire non négatif. Pour plus d’informations, veuillez consulter Régularisation L2.
Vous pouvez spécifier un multiplicateur de régularisation L2 pour les couches de réseau avec des paramètres entraînables. Pour plus d’informations, veuillez consulter Set Up Parameters in Convolutional and Fully Connected Layers.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Momentum
— Contribution de l’étape précédente
0.9
(par défaut) | scalaire entre 0
et 1
La contribution de l’étape de mise à jour des paramètres, de l’itération précédente à l’itération actuelle, de la descente de gradient stochastique avec momentum est spécifiée comme un scalaire compris entre 0
et 1
.
Une valeur de 0
signifie une absence de contribution de l’étape précédente, tandis qu’une valeur de 1
signifie une contribution maximale de l’étape précédente. La valeur par défaut fonctionne bien pour la plupart des tâches.
Pour spécifier l’option d’apprentissage Momentum
, solverName
doit être 'sgdm'
.
Pour plus d’informations, veuillez consulter Descente de gradient stochastique avec momentum.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
GradientDecayFactor
— Taux de décroissance de la moyenne mobile du gradient
0.9
(par défaut) | scalaire non négatif inférieur à 1
Le taux de décroissance de la moyenne mobile du gradient pour le solveur Adam est spécifié comme un scalaire non négatif inférieur à 1
. Le taux de décroissance du gradient est désigné par β1
dans la section Adam.
Pour spécifier l’option d’apprentissage GradientDecayFactor
, solverName
doit être 'adam'
.
La valeur par défaut fonctionne bien pour la plupart des tâches.
Pour plus d’informations, veuillez consulter Adam.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SquaredGradientDecayFactor
— Taux de décroissance de la moyenne mobile du gradient au carré
scalaire non négatif inférieur à 1
Le taux de décroissance de la moyenne mobile du gradient au carré pour les solveurs Adam et RMSProp est spécifié comme un scalaire non négatif inférieur à 1
. Le taux de décroissance du gradient au carré est désigné par β2
dans [4].
Pour spécifier l’option d’apprentissage SquaredGradientDecayFactor
, solverName
doit être 'adam'
ou 'rmsprop'
.
Les valeurs typiques du taux de décroissance sont 0.9
, 0.99
et 0.999
, ce qui correspond respectivement aux longueurs moyennes de 10
, 100
et 1000
mises à jour de paramètres.
La valeur par défaut est 0.999
pour le solveur Adam. La valeur par défaut est 0.9
pour le solveur RMSProp.
Pour plus d’informations, veuillez consulter Adam et RMSProp.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Epsilon
— Offset du dénominateur
1e-8
(par défaut) | scalaire positif
L'offset du dénominateur pour les solveurs Adam et RMSProp est spécifié comme un scalaire positif.
Le solveur ajoute l’offset au dénominateur dans les mises à jour des paramètres du réseau pour éviter la division par zéro. La valeur par défaut fonctionne bien pour la plupart des tâches.
Pour spécifier l’option d’apprentissage Epsilon
, solverName
doit être 'adam'
ou 'rmsprop'
.
Pour plus d’informations, veuillez consulter Adam et RMSProp.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ResetInputNormalization
— Option de réinitialisation de la normalisation de la couche d’entrée
1
(vrai) (par défaut) | 0
(faux)
Option de réinitialisation de la normalisation de la couche d’entrée, spécifiée comme l’un des éléments suivants :
1
(vrai) — Réinitialiser les statistiques de normalisation de la couche d’entrée et les recalculer au moment de l’apprentissage.0
(faux) — Calculer les statistiques de normalisation au moment de l’apprentissage lorsqu’elles sont vides.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
BatchNormalizationStatistics
— Mode d’évaluation des statistiques dans les couches de normalisation par batchs
'population'
(par défaut) | 'moving'
Le mode d’évaluation des statistiques dans les couches de normalisation par batchs est spécifié comme l’un des éléments suivants :
'population'
– Utiliser les statistiques de population. Après l’apprentissage, le software finalise les statistiques en passant à nouveau par les données d’apprentissage et utilise la moyenne et la variance correspondantes.'moving'
– Approximer les statistiques pendant l’apprentissage avec une estimation continue donnée par les étapes de mises à jouroù et désignent respectivement la moyenne et la variance mises à jour, et désignent respectivement les valeurs de décroissance de la moyenne et de la variance, et désignent respectivement la moyenne et la variance de la couche d’entrée, et et désignent respectivement les dernières valeurs de la moyenne mobile et de la variance. Après l’apprentissage, le software utilise la valeur la plus récente des statistiques de moyenne mobile et de variance. Cette option supporte seulement l’apprentissage sur CPU ou sur un GPU unique.
GradientThreshold
— Seuil de gradient
Inf
(par défaut) | scalaire positif
Le seuil de gradient est spécifié comme étant Inf
ou un scalaire positif. Si le gradient dépasse la valeur de GradientThreshold
, le gradient est écrêté selon l’option d’apprentissage GradientThresholdMethod
.
Pour plus d’informations, veuillez consulter Écrêtage de gradient.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
GradientThresholdMethod
— Méthode de seuil de gradient
'l2norm'
(par défaut) | 'global-l2norm'
| 'absolute-value'
La méthode de seuil de gradient utilisée pour écrêter des valeurs de gradients dépassant le seuil de gradient est spécifiée comme l’un des éléments suivants :
'l2norm'
— Si la norme L2 du gradient d’un paramètre entraînable est supérieure àGradientThreshold
, mettre à l’échelle le gradient pour que la norme L2 soit égale àGradientThreshold
.'global-l2norm'
— Si la norme L2 globale, L, est supérieure àGradientThreshold
, mettre à l’échelle tous les gradients par un facteur deGradientThreshold/
L. La norme L2 globale prend en compte tous les paramètres entraînables.'absolute-value'
— Si la valeur absolue d’une dérivée partielle individuelle dans le gradient d’un paramètre entraînable est supérieure àGradientThreshold
, mettre à l’échelle la dérivée partielle pour avoir une amplitude égale àGradientThreshold
et conserver le signe de la dérivée partielle.
Pour plus d’informations, veuillez consulter Écrêtage de gradient.
SequenceLength
— Options de remplissage et de troncature des séquences
"longest"
(par défaut) | "shortest"
| entier positif
Les options de remplissage, de troncature et de division des séquences d’entrée sont spécifiées comme étant l’un des éléments suivants :
"longest"
— Remplir les séquences dans chaque mini-batch afin qu’elles aient la même longueur que la séquence la plus longue. Cette option n’ignore aucune donnée, mais le remplissage peut introduire du bruit dans le réseau."shortest"
— Tronquer les séquences dans chaque mini-batch afin qu’elles aient la même longueur que la séquence la plus courte. Cette option garantit qu’il n’y a pas de remplissage, mais des données seront ignorées.Entier positif — Pour chaque mini-batch, remplir les séquences à la longueur de la séquence la plus longue dans le mini-batch, puis diviser les séquences en séquences plus petites de la longueur spécifiée. En cas de division, le software crée des mini-batchs supplémentaires. Si la longueur de séquence spécifiée ne divise pas uniformément les longueurs des séquences des données, les mini-batchs contenant les fins de ces séquences auront une longueur plus courte que la longueur de séquence spécifiée. Utilisez cette option si les séquences complètes ne tiennent pas en mémoire. Vous pouvez aussi essayer de réduire le nombre de séquences par mini-batch en définissant l’option
MiniBatchSize
à une valeur inférieure.
Pour en savoir plus sur l’effet du remplissage, de la troncature et de la division des séquences d’entrée, veuillez consulter Sequence Padding, Truncation, and Splitting.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
SequencePaddingDirection
— Direction du remplissage ou de la troncature
"right"
(par défaut) | "left"
La direction du remplissage ou de la troncature est spécifiée comme étant l’un des éléments suivants :
"right"
— Remplir ou tronquer les séquences sur la droite. Les séquences commencent au même pas de temps et le software tronque ou remplit à la fin des séquences."left"
— Remplir ou tronquer les séquences sur la gauche. Le software tronque ou remplit au début des séquences afin que les séquences finissent au même pas de temps.
Les couches récurrentes traitant les données des séquences un pas de temps à la fois, lorsque la propriété OutputMode
de la couche récurrente est 'last'
, le remplissage des derniers pas de temps peut influencer négativement la sortie de la couche. Pour remplir ou tronquer les données des séquences sur la gauche, définissez l’option SequencePaddingDirection
à "left"
.
Pour les réseaux de séquence à séquence (lorsque la propriété OutputMode
est 'sequence'
pour chaque couche récurrente), le remplissage des premiers pas de temps peut influencer négativement les prédictions des pas de temps précédents. Pour remplir ou tronquer les données des séquences sur la droite, définissez l’option SequencePaddingDirection
à "right"
.
Pour en savoir plus sur l’effet du remplissage, de la troncature et de la division des séquences d’entrée, veuillez consulter Sequence Padding, Truncation, and Splitting.
SequencePaddingValue
— Valeur de remplissage des séquences
0
(par défaut) | scalaire
La valeur, avec laquelle le remplissage des séquences d’entrée sera effectué, est spécifiée comme un scalaire.
L’option est valide uniquement si SequenceLength
est "longest"
ou un entier positif. Ne remplissez pas des séquences avec NaN
, car cela peut propager des erreurs dans tout le réseau.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ExecutionEnvironment
— Ressources hardware du réseau d’apprentissage
'auto'
| 'cpu'
| 'gpu'
| 'multi-gpu'
| 'parallel'
L'option de ressources hardware du réseau d’apprentissage est spécifiée comme l’un des éléments suivants :
'auto'
— Utiliser un GPU en cas de disponibilité. Sinon, utiliser le CPU.'cpu'
— Utiliser le CPU.'gpu'
— Utiliser le GPU.'multi-gpu'
— Utiliser plusieurs GPU sur une machine, avec un pool parallèle local basé sur votre profil de cluster par défaut. S’il n’y a pas de pool parallèle, le software démarre un pool parallèle avec une taille de pool égale au nombre de GPU disponibles.'parallel'
— Utiliser un pool parallèle local ou distant basé sur votre profil de cluster par défaut. S’il n’y a pas de pool parallèle, le software en démarre un avec le profil de cluster par défaut. Si le pool a accès aux GPU, seuls les workers avec un GPU unique réalisent le calcul d’apprentissage. Si le pool n’a pas de GPU, l’apprentissage a lieu sur tous les travailleurs du CPU disponibles.
Pour plus d’informations sur l’utilisation des différents environnements d’exécution, veuillez consulter Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.
Les options 'gpu'
, 'multi-gpu'
et 'parallel'
nécessitent Parallel Computing Toolbox™. Pour utiliser un GPU pour le Deep Learning, vous devez également disposer d’un équipement GPU supporté. Pour plus d'information sur les dispositifs supportés, veuillez consulter GPU Computing Requirements (Parallel Computing Toolbox). Si vous choisissez une de ces options et que Parallel Computing Toolbox ou un GPU adapté n’est pas disponible, le software renvoie une erreur.
Pour améliorer les performances de l’apprentissage en parallèle, essayez d’augmenter les options d’apprentissage MiniBatchSize
et InitialLearnRate
par le nombre de GPU.
Les options 'multi-gpu'
et 'parallel'
ne supportent pas les réseaux contenant des couches personnalisées avec des paramètres d’état ou des couches prédéfinies qui ont un état au moment de l’apprentissage. Par exemple :
Les couches récurrentes comme les objets
LSTMLayer
,BiLSTMLayer
ouGRULayer
lorsque l’option d’apprentissageSequenceLength
est un entier positifLes objets
BatchNormalizationLayer
lorsque l’option d’apprentissageBatchNormalizationStatistics
est définie à'moving'
WorkerLoad
— Division de charge pour les workers parallèles
scalaire entre 0
et 1
| entier positif | vecteur numérique
La division de charge pour les workers parallèles entre des GPU ou des CPU est spécifiée comme étant l’un des éléments suivants :
Scalaire entre
0
et1
— Fraction des workers sur chaque machine à utiliser pour les calculs lors de l’apprentissage du réseau. Si vous entraînez le réseau avec des données dans un datastore de mini-batchs avec une distribution activée en arrière-plan, les workers restants extraient et prétraitent les données en arrière-plan.Entier positif — Nombre de workers sur chaque machine à utiliser pour les calculs lors de l’apprentissage du réseau. Si vous entraînez le réseau avec des données dans un datastore de mini-batchs avec une distribution activée en arrière-plan, les workers restants extraient et prétraitent les données en arrière-plan.
Vecteur numérique — Charge d’apprentissage du réseau pour chaque worker dans le pool parallèle. Pour un vecteur
W
, le workeri
reçoit une fractionW(i)/sum(W)
du travail (nombre d’exemples par mini-batch). Si vous entraînez un réseau avec des données dans un datastore de mini-batchs avec une distribution activée en arrière-plan, vous pouvez attribuer une charge de worker de 0 afin d’utiliser ce worker pour l’extraction de données en arrière-plan. Le vecteur spécifié doit contenir une valeur par worker dans le pool parallèle.
Si le pool parallèle a accès aux GPU, les workers sans GPU unique ne sont jamais utilisés pour les calculs d’apprentissage. Par défaut, les pools avec GPU utilisent tous les workers avec un GPU unique pour les calculs d’apprentissage et les workers restants pour la distribution en arrière-plan. Si le pool n’a pas accès aux GPU et que des CPU sont utilisés pour l’apprentissage, un worker par machine est utilisé par défaut pour la répartition des données en arrière-plan.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DispatchInBackground
— Indicateur d’activation de la répartition en arrière-plan
0
(faux) (par défaut) | 1
(vrai)
L'indicateur d’activation de la répartition en arrière-plan (file d’attente de préextraction asynchrone) pour la lecture des données d’apprentissage dans les datastores est spécifié comme étant 0
(faux) ou 1
(vrai). La répartition en arrière-plan nécessite Parallel Computing Toolbox.
DispatchInBackground
est supporté uniquement pour les datastores qui peuvent être partitionnés. Pour plus d’informations, veuillez consulter Use Datastore for Parallel Training and Background Dispatching.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
CheckpointPath
— Chemin de sauvegarde des réseaux de point de contrôle
""
(par défaut) | vecteur de caractères
Le chemin de sauvegarde des réseaux de point de contrôle est spécifié comme un vecteur de caractères ou un scalaire de type string.
Si vous ne spécifiez pas de chemin (c’est-à-dire que vous utilisez le
""
par défaut), le software ne sauvegarde pas de réseau de point de contrôle.Si vous spécifiez un chemin,
trainNetwork
sauvegarde des réseaux de point de contrôle dans ce chemin et attribue un nom unique à chaque réseau. Vous pouvez ensuite charger un réseau de point de contrôle et reprendre l’apprentissage de ce réseau.Si le dossier n’existe pas, vous devez d’abord le créer avant de spécifier le chemin de sauvegarde des réseaux de point de contrôle. Si le chemin que vous spécifiez n’existe pas,
trainingOptions
renvoie une erreur.
Les options CheckpointFrequency
et CheckpointFrequencyUnit
spécifient la fréquence de sauvegarde des réseaux de point de contrôle.
Pour plus d’informations sur la sauvegarde des réseaux de point de contrôle, veuillez consulter Save Checkpoint Networks and Resume Training.
Types de données : char
| string
CheckpointFrequency
— Fréquence de sauvegarde des réseaux de point de contrôle
1
(par défaut) | entier positif
La fréquence de sauvegarde des réseaux de point de contrôle est spécifiée comme étant un entier positif.
Si CheckpointFrequencyUnit
est 'epoch'
, le software sauvegarde des réseaux de point de contrôle tous les CheckpointFrequency
epochs.
Si CheckpointFrequencyUnit
est 'iteration'
, le software sauvegarde des réseaux de point de contrôle toutes les CheckpointFrequency
itérations.
Cette option a un effet uniquement si CheckpointPath
n’est pas vide.
Types de données : single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
CheckpointFrequencyUnit
— Unité de fréquence des points de contrôle
'epoch'
(par défaut) | 'iteration'
Unité de fréquence des points de contrôle, spécifiée comme 'epoch'
ou 'iteration'
.
Si CheckpointFrequencyUnit
est 'epoch'
, le software sauvegarde des réseaux de point de contrôle tous les CheckpointFrequency
epochs.
Si CheckpointFrequencyUnit
est 'iteration'
, le software sauvegarde des réseaux de point de contrôle toutes les CheckpointFrequency
itérations.
Cette option a un effet uniquement si CheckpointPath
n’est pas vide.
OutputFcn
— Fonctions de sortie
handle de fonction | cell array de handles de fonction
Les fonctions de sortie à appeler pendant l’apprentissage sont spécifiées comme un handle de fonction ou un cell array de handles de fonction. trainNetwork
appelle les fonctions spécifiées une fois avant le début de l’apprentissage, après chaque itération et une fois quand l’apprentissage est terminé. trainNetwork
passe une structure contenant des informations dans les champs suivants :
Champ | Description |
---|---|
Epoch | Nombre courant d’epochs |
Iteration | Nombre courant d’itérations |
TimeSinceStart | Temps en secondes depuis le depuis de l’apprentissage |
TrainingLoss | Perte courante des mini-batchs |
ValidationLoss | Perte sur les données de validation |
BaseLearnRate | Taux d’apprentissage de base courant |
TrainingAccuracy | Précision sur le mini-batch courant (réseaux de classification) |
TrainingRMSE | RMSE sur le mini-batch courant (réseaux de régression) |
ValidationAccuracy | Précision sur les données de validation (réseaux de classification) |
ValidationRMSE | RMSE sur les données de validation (réseaux de régression) |
State | État courant de l’apprentissage, avec une valeur possible de "start" , "iteration" ou "done" . |
Si un champ n’est pas calculé ou pertinent pour un certain appel des fonctions de sortie, ce champ contient un tableau vide.
Vous pouvez utiliser des fonctions de sortie pour afficher ou tracer des informations sur la progression, ou arrêter l’apprentissage. Pour arrêter l’apprentissage de manière précoce, faites en sorte que votre fonction de sortie renvoie 1
(vrai). Si une fonction de sortie renvoie 1
(vrai), l’apprentissage se termine et trainNetwork
renvoie le dernier réseau. Vous trouverez un exemple illustrant comment utiliser des fonctions de sortie dans Customize Output During Deep Learning Network Training.
Types de données : function_handle
| cell
Arguments de sortie
options
— Options d’apprentissage
TrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
Options d’apprentissage, renvoyées comme un objet TrainingOptionsSGDM
, TrainingOptionsRMSProp
ou TrainingOptionsADAM
. Pour entraîner un réseau de neurones, utilisez les options d’apprentissage comme argument d’entrée de la fonction trainNetwork
.
Si solverName
est 'sgdm'
, 'rmsprop'
ou 'adam'
, les options d’apprentissage sont renvoyées respectivement comme un objet TrainingOptionsSGDM
, TrainingOptionsRMSProp
ou TrainingOptionsADAM
.
Vous pouvez éditer les propriétés des options d’apprentissage de TrainingOptionsSGDM
, TrainingOptionsADAM
et TrainingOptionsRMSProp
directement. Par exemple, pour modifier la taille des mini-batchs après avoir utilisé la fonction trainingOptions
, vous pouvez éditer directement la propriété MiniBatchSize
:
options = trainingOptions('sgdm'); options.MiniBatchSize = 64;
Conseils
Pour la plupart des tâches de Deep Learning, vous pouvez utiliser un réseau préentraîné et l’adapter à vos propres données. Vous trouverez un exemple illustrant comment utiliser l’apprentissage par transfert pour entraîner un réseau de neurones à convolution afin de classer un nouveau jeu d’images dans Utiliser un réseau de Deep Learning pour classer de nouvelles images. Vous pouvez également créer et entraîner des réseaux à partir de zéro avec des objets
layerGraph
avec les fonctionstrainNetwork
ettrainingOptions
.Si la fonction
trainingOptions
ne fournit pas les options d’apprentissage dont vous avez besoin pour votre tâche, vous pouvez créer une boucle d’apprentissage personnalisée avec la différenciation automatique. Pour en savoir plus, veuillez consulter Define Deep Learning Network for Custom Training Loops.
Algorithmes
Poids et biais initiaux
Pour les couches de convolution et entièrement connectés, l’initialisation des poids et des biais est donnée respectivement par les propriétés WeightsInitializer
et BiasInitializer
des couches. Vous trouverez des exemples illustrant comme modifier l’initialisation des poids et des biais dans Specify Initial Weights and Biases in Convolutional Layer et Specify Initial Weights and Biases in Fully Connected Layer.
Descente de gradient stochastique
L’algorithme de descente de gradient standard met à jour les paramètres du réseau (poids et biais) pour minimiser la fonction de perte en effectuant de petits pas à chaque itération dans la direction du gradient négatif de la perte,
où est le nombre itérations, est le taux d’apprentissage, est le vecteur de paramètres et est la fonction de perte. Dans l’algorithme de descente de gradient standard, le gradient de la fonction de perte, , est évalué avec l’ensemble du jeu d’apprentissage et l’algorithme de descente de gradient standard utilise l’ensemble du jeu de données en une seule fois.
En revanche, à chaque itération, l’algorithme de descente de gradient stochastique évalue le gradient et met à jour les paramètres avec un sous-ensemble des données d’apprentissage. Un sous-ensemble différent, appelé mini-batch, est utilisé à chaque itération. Le passage complet de l’algorithme d’apprentissage sur l’ensemble du jeu d’apprentissage avec des mini-batchs est un epoch. La descente de gradient stochastique est stochastique car la mise à jour des paramètres calculée avec un mini-batch est une estimation bruitée de la mise à jour des paramètres qui résulterait du jeu de données complet. Vous pouvez spécifier la taille des mini-batchs et le nombre maximal d’epochs avec respectivement les options d’apprentissage MiniBatchSize
et MaxEpochs
.
Descente de gradient stochastique avec momentum
L’algorithme de descente de gradient stochastique peut osciller le long de la trajectoire de la descente la plus forte vers l’optimum. L’ajout d’un terme de momentum à la mise à jour des paramètres est une manière de réduire cette oscillation [2]. La mise à jour de la descente de gradient stochastique avec momentum (SGDM) est
où détermine la contribution du pas de gradient précédent à l’itération actuelle. Vous pouvez spécifier cette valeur avec l’option d’apprentissage Momentum
. Pour entraîner un réseau de neurones avec l’algorithme de descente de gradient stochastique avec momentum, spécifiez 'sgdm'
comme premier argument d’entrée de trainingOptions
. Pour spécifier la valeur initiale du taux d’apprentissage α, utilisez l’option d’apprentissage InitialLearnRate
. Vous pouvez également spécifier différents taux d’apprentissage pour différentes couches et différents paramètres. Pour plus d’informations, veuillez consulter Set Up Parameters in Convolutional and Fully Connected Layers.
RMSProp
La descente de gradient stochastique avec momentum utilise un seul taux d’apprentissage pour tous les paramètres. D’autres algorithmes d’optimisation cherchent à améliorer l’apprentissage du réseau avec des taux d’apprentissage différents selon le paramètre et peuvent s’adapter automatiquement à la fonction de perte en cours d’optimisation. RMSProp (propagation de la moyenne quadratique) est l’un de ces algorithmes. Il conserve une moyenne mobile des carrés éléments par éléments des gradients des paramètres,
β2 est le taux de décroissance de la moyenne mobile. Les valeurs courantes du taux de décroissance sont 0,9, 0,99 et 0,999. Les longueurs moyennes correspondantes des gradients au carré sont égales à 1/(1-β2), soit respectivement 10, 100 et 1 000 mises à jour des paramètres. Vous pouvez spécifier β2 avec les options d’apprentissage SquaredGradientDecayFactor
. L’algorithme RMSProp utilise cette moyenne mobile pour normaliser les mises à jour de chaque paramètre individuellement,
où la division est effectuée éléments par éléments. L’utilisation de RMSProp diminue efficacement les taux d’apprentissage des paramètres avec des grands gradients, et augmente les taux d’apprentissage des paramètres avec des petits gradients. ɛ est une petite constante ajoutée pour éviter la division par zéro. Vous pouvez spécifier ɛ avec l’option d’apprentissage Epsilon
, mais la valeur par défaut fonctionne généralement bien. Pour utiliser RMSProp pour entraîner un réseau de neurones, spécifiez 'rmsprop'
comme première entrée de trainingOptions
.
Adam
Adam (dérivé d'adaptive moment estimation) [4] utilise une mise à jour des paramètres similaire à RMSProp, mais avec un terme de momentum supplémentaire. Il conserve une moyenne mobile éléments par éléments des gradients des paramètres et de leurs valeurs au carré,
. Vous pouvez spécifier les taux de décroissance β1 et β2 avec respectivement les options d’apprentissage GradientDecayFactor
et SquaredGradientDecayFactor
. Adam utilise les moyennes mobiles pour mettre à jours les paramètres du réseau comme
. Si des gradients sont similaires sur de nombreuses itérations, l’utilisation d’une moyenne mobile du gradient permet aux mises à jour des paramètres d'établir un momentum dans une certaine direction. Si les gradients contiennent principalement du bruit, la moyenne mobile du gradient devient plus petite, de sorte que les mises à jour des paramètres diminuent également. Vous pouvez spécifier ɛ avec l’option d’apprentissage Epsilon
. La valeur par défaut fonctionne généralement bien, mais pour certains problèmes, une valeur de 1 fonctionne mieux. Pour utiliser Adam pour entraîner un réseau de neurones, spécifiez 'adam'
comme première entrée de trainingOptions
. La mise à jour Adam complète inclut également un mécanisme de correction d’un biais qui apparaît au début de l’apprentissage. Pour plus d’informations, veuillez consulter [4].
Spécifiez le taux d’apprentissage α pour tous les algorithmes d’optimisation avec l’option d’apprentissage InitialLearnRate
. L’effet du taux d’apprentissage est différent pour les différents algorithmes d’optimisation, donc les taux d’apprentissage optimaux sont généralement différents. Vous pouvez également spécifier des taux d’apprentissage différents selon les couches et le paramètre. Pour plus d’informations, veuillez consulter Set Up Parameters in Convolutional and Fully Connected Layers.
Écrêtage de gradient
Si l’amplitude des gradients augmente de manière exponentielle, l’apprentissage est instable et peut diverger au bout de quelques itérations. Cette « explosion des gradients » est indiquée par une perte de l’apprentissage qui devient NaN
ou Inf
. L’écrêtage de gradient permet d’éviter l’explosion des gradients en stabilisant l’apprentissage à des taux d’apprentissage élevés et en présence de valeurs aberrantes [3]. L’écrêtage de gradient permet d’entraîner plus rapidement les réseaux et n’a généralement aucun impact sur la précision de la tâche apprise.
Il existe deux types d’écrêtage de gradient.
L’écrêtage de gradient en fonction de la norme met à l’échelle le gradient en fonction d’un seuil et ne modifie pas la direction du gradient. Les valeurs
'l2norm'
et'global-l2norm'
deGradientThresholdMethod
sont des méthodes d’écrêtage de gradient en fonction de la norme.L’écrêtage de gradient en fonction de la valeur écrête toute dérivée partielle supérieure au seuil, ce qui peut entraîner un changement arbitraire de la direction du gradient. L’écrêtage de gradient en fonction de la valeur peut avoir un comportement imprévisible, mais des changements suffisamment petits ne provoquent pas de divergence du réseau. La valeur
'absolute-value'
deGradientThresholdMethod
est une méthode d’écrêtage du gradient en fonction d'une valeur.
Régularisation L2
L’ajout d’un terme de régularisation des poids à la fonction de perte est une manière de réduire le surajustement [1], [2]. Le terme de régularisation est également appelé décroissance du poids. La fonction de perte avec le terme de régularisation prend la forme
où est le vecteur de poids, est le facteur (coefficient) de régularisation et la fonction de régularisation est
Notez que les biais ne sont pas régularisés[2]. Vous pouvez spécifier le facteur de régularisation avec l’option d’apprentissage L2Regularization
. Vous pouvez également spécifier différents facteurs de régularisation pour différentes couches et différents paramètres. Pour plus d’informations, veuillez consulter Set Up Parameters in Convolutional and Fully Connected Layers.
La fonction de perte que le software utilise pour l’apprentissage du réseau inclut le terme de régularisation. Cependant, la valeur de la perte affichée dans la fenêtre de commande et dans le tracé de la progression de l’apprentissage pendant l’apprentissage est la perte sur les données uniquement et n’inclut pas le terme de régularisation.
Références
[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.
[2] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.
[3] Pascanu, R., T. Mikolov, and Y. Bengio. "On the difficulty of training recurrent neural networks". Proceedings of the 30th International Conference on Machine Learning. Vol. 28(3), 2013, pp. 1310–1318.
[4] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).
Historique des versions
Introduit dans R2016aR2022b: trainNetwork
remplit les mini-batchs à la longueur de la séquence la plus longue avant division lorsque vous spécifiez l’option d’apprentissage SequenceLength
comme un entier
À partir de R2022b, lorsque vous entraînez un réseau avec des données de séquence avec la fonction trainNetwork
et que l’option SequenceLength
est un entier, le software remplit les séquences à la longueur de la séquence la plus longue dans chaque mini-batch puis divise les séquences en mini-batchs avec la longueur de séquence spécifiée. Si SequenceLength
ne divise pas uniformément la longueur des séquences des mini-batchs, le dernier mini-batch divisé a une longueur plus courte que SequenceLength
. Ce comportement évite l’apprentissage du réseau sur des pas de temps contenant uniquement des valeurs de remplissage.
Pour les versions antérieures, le software remplit les mini-batchs de séquences afin qu’ils aient une longueur correspondant au multiple le plus proche de SequenceLength
supérieur ou égal à la longueur des mini-batchs, puis divise les données. Pour reproduire ce comportement, utilisez une boucle d’apprentissage personnalisée et implémentez ce comportement lorsque vous prétraitez les mini-batchs de données.
R2018b: L’option d’apprentissage ValidationPatience
par défaut est Inf
À partir de R2018b, la valeur par défaut de l’option d’apprentissage ValidationPatience
est Inf
, ce qui signifie que l’arrêt automatique via la validation est désactivé. Ce comportement évite que la phase d'apprentissage s’arrête avant que l’apprentissage à partir des données soit suffisant.
Dans les versions précédentes, la valeur par défaut est 5
. Pour reproduire ce comportement, définissez l’option ValidationPatience
sur 5
.
R2018b: Nom de fichier différent pour des réseaux de point de contrôle
À partir de R2018b, lors de la sauvegarde de réseaux de points de contrôle, le software attribue des noms de fichier commençant par net_checkpoint_
. Pour les versions antérieures, le software attribue des noms de fichier commençant par convnet_checkpoint_
.
Si vous avez un code qui sauvegarde et charge des réseaux de point de contrôle, mettez à jour votre code pour charger les fichiers avec le nouveau nom.
Voir aussi
trainNetwork
| analyzeNetwork
| Deep Network Designer
Rubriques
- Créer un réseau simple de Deep Learning pour la classification
- Transfer Learning Using Pretrained Network
- Resume Training from Checkpoint Network
- Deep Learning with Big Data on CPUs, GPUs, in Parallel, and on the Cloud
- Specify Layers of Convolutional Neural Network
- Set Up Parameters and Train Convolutional Neural Network
- Define Custom Training Loops, Loss Functions, and Networks
Ouvrir l'exemple
Vous possédez une version modifiée de cet exemple. Souhaitez-vous ouvrir cet exemple avec vos modifications ?
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)