trainingOptions
Opzioni per l’addestramento della rete neurale di Deep Learning
Descrizione
restituisce le opzioni di addestramento per l'ottimizzatore specificato da options
= trainingOptions(solverName
)solverName
. Per addestrare una rete neurale, utilizzare le opzioni di addestramento come un argomento di input nella funzione trainNetwork
.
restituisce le opzioni di addestramento con ulteriori opzioni specificate da uno o più argomenti nome-valore.options
= trainingOptions(solverName
,Name=Value
)
Esempi
Specificazione delle opzioni di addestramento
Creare un set di opzioni per l’addestramento di una rete usando la discesa stocastica del gradiente con momento. Ridurre la velocità di apprendimento di un fattore di 0,2 ogni 5 epoche. Impostare il numero massimo di epoche per l’addestramento su 20 e utilizzare un mini-batch con 64 osservazioni a ogni iterazione. Attivare il grafico dei progressi dell’addestramento.
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'
Monitoraggio dei progressi dell’addestramento in Deep Learning
Questo esempio mostra come monitorare il processo di addestramento delle reti di Deep Learning.
Quando si addestrano le reti per il Deep Learning, è spesso utile monitorare i progressi dell’addestramento. Tracciando varie metriche durante l'addestramento, è possibile comprendere come procede l’addestramento. Ad esempio, è possibile determinare se e quanto velocemente la precisione della rete stia migliorando e se la rete stia iniziando a sovradimensionare i dati di addestramento.
Questo esempio mostra come monitorare i progressi dell’addestramento delle reti addestrate utilizzando la funzione trainNetwork
. Per le reti addestrate utilizzando un loop di addestramento personalizzato, utilizzare un oggetto trainingProgressMonitor
per tracciare le metriche durante l’addestramento. Per ulteriori informazioni, vedere Monitor Custom Training Loop Progress.
Quando si imposta l’opzione di addestramento Plots
su "training-progress"
in trainingOptions
e si avvia l’addestramento della rete, trainNetwork
crea una figura e visualizza le metriche di addestramento a ciascuna iterazione. Ogni iterazione è una stima del gradiente e un aggiornamento dei parametri della rete. Se si specificano i dati di convalida in trainingOptions
, la figura mostrerà le metriche di convalida ogni volta che trainNetwork
convalida la rete. La figura traccia quanto segue:
Precisione dell’addestramento: precisione della classificazione su ogni singolo mini-batch.
Precisione dell’addestramento livellato: precisione dell’addestramento livellato, ottenuta applicando un algoritmo di livellamento alla precisione dell’addestramento. È meno rumorosa della precisione non livellata e consente di individuare le tendenze più facilmente.
Precisione della convalida: precisione della classificazione sull’intero insieme di convalida (specificato utilizzando
trainingOptions
).Perdita di addestramento, perdita di addestramento livellato e perdita di convalida: rispettivamente la perdita su ciascun mini-batch, sulla sua versione livellata e sull’insieme di convalida. Se il livello finale della rete è un
classificationLayer
, la funzione di perdita è la perdita di entropia incrociata. Per ulteriori informazioni sulle funzioni di perdita per i problemi di classificazione e regressione, vedere Output Layers.
Per le reti di regressione, la figura traccia l'errore quadratico medio (RMSE) anziché la precisione.
La figura contrassegna ciascuna epoca di apprendimento utilizzando uno sfondo ombreggiato. Un'epoca è un passaggio completo attraverso l’insieme completo di dati.
Durante l'addestramento è possibile interromperlo e ripristinare lo stato attuale della rete facendo clic sul pulsante di stop, situato nell'angolo in alto a destra. Ad esempio, si potrebbe voler interrompere l'addestramento quando la precisione della rete raggiunge uno stato stazionario ed è evidente che la precisione non migliora ulteriormente. Dopo aver fatto clic sul pulsante di stop, l'addestramento può richiedere un certo tempo per essere completato. Al termine dell'addestramento, trainNetwork
restituisce la rete addestrata.
Al termine dell'addestramento, visualizzare i risultati che mostrano la precisione della convalida finale e il motivo per cui l'addestramento è terminato. Se l'opzione di addestramento OutputNetwork
è impostata su "last-iteration"
(predefinita), le metriche finalizzate corrispondono all'ultima iterazione di addestramento. Se l'opzione di addestramento OutputNetwork
è impostata su "best-validation-loss"
, le metriche finalizzate corrispondono all'iterazione con la perdita di convalida più bassa. L'iterazione da cui vengono calcolate le metriche di convalida finali è etichettata come finale nei grafici.
Se la rete contiene livelli di normalizzazione batch, le metriche di convalida finali possono essere diverse da quelle valutate durante l’addestramento, in quanto le statistiche di media e varianza utilizzate per la normalizzazione del batch possono essere diverse al termine dell'addestramento. Ad esempio, se l'opzione di addestramento BatchNormalizationStatisics
è impostata su "population"
, dopo l'addestramento il software finalizza le statistiche di normalizzazione del batch passando ancora una volta attraverso i dati di addestramento e utilizzando la media e la varianza risultanti. Se l'opzione di addestramento BatchNormalizationStatisics
è impostata su "moving"
, il software approssima le statistiche durante l'addestramento utilizzando una stima corrente e i valori più recenti delle statistiche.
Le informazioni relative al tempo di addestramento e alle impostazioni possono essere visualizzate sulla destra. Per saperne di più sulle opzioni di addestramento, vedere Set Up Parameters and Train Convolutional Neural Network.
Per salvare il grafico dei progressi dell’addestramento, fare clic su Export Training Plot (Esporta grafico di addestramento) nella finestra di addestramento. È possibile salvare il grafico come file PNG, JPEG, TIFF o PDF. È inoltre possibile salvare i singoli grafici di perdita, precisione ed errore quadratico medio utilizzando la barra degli strumenti degli assi.
Tracciamento dei progressi dell’addestramento durante l’addestramento
Addestrare una rete e tracciare i progressi dell'addestramento durante l’addestramento.
Caricare i dati di addestramento, che contengono 5000 immagini di cifre. Mettere da parte 1000 immagini per la convalida della rete.
[XTrain,YTrain] = digitTrain4DArrayData; idx = randperm(size(XTrain,4),1000); XValidation = XTrain(:,:,:,idx); XTrain(:,:,:,idx) = []; YValidation = YTrain(idx); YTrain(idx) = [];
Costruire una rete per classificare i dati delle immagini di cifre.
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];
Specificare le opzioni per l'addestramento della rete. Specificare i dati di convalida per convalidare la rete a intervalli regolari durante l’addestramento. Scegliere il valore ValidationFrequency
in modo che la rete venga convalidata circa una volta per ciascuna epoca. Per tracciare i progressi dell'addestramento durante l’addestramento, impostare l'opzione di addestramento Plots
su "training-progress"
.
options = trainingOptions("sgdm", ... MaxEpochs=8, ... ValidationData={XValidation,YValidation}, ... ValidationFrequency=30, ... Verbose=false, ... Plots="training-progress");
Addestrare la rete.
net = trainNetwork(XTrain,YTrain,layers,options);
Argomenti di input
solverName
— Solver per l’addestramento della rete neurale
'sgdm'
| 'rmsprop'
| 'adam'
Solver per l’addestramento della rete neurale, specificato come uno dei seguenti:
'sgdm'
: utilizzo dell’ottimizzatore di discesa stocastica del gradiente con momento (SGDM). Si può specificare il valore del momento utilizzando l’opzione di addestramentoMomentum
.'rmsprop'
: utilizzo dell’ottimizzatore RMSProp. Si può specificare la velocità di decadimento della media mobile del gradiente quadratico usando l’opzione di addestramentoSquaredGradientDecayFactor
.'adam'
: utilizzo dell’ottimizzatore Adam. Si possono specificare le velocità di decadimento del gradiente e delle medie mobili del gradiente quadratico utilizzando rispettivamente le opzioni di addestramentoGradientDecayFactor
eSquaredGradientDecayFactor
.
Per ulteriori informazioni sui diversi solver, vedere Discesa stocastica del gradiente.
Argomenti nome-valore
Specificare coppie opzionali di argomenti come Name1=Value1,...,NameN=ValueN
, dove Name
è il nome dell’argomento e Value
è il valore corrispondente. Gli argomenti nome-valore devono comparire dopo gli altri argomenti, ma l'ordine delle coppie non ha importanza.
Prima della R2021a, utilizzare le virgole per separare ogni nome e valore e racchiudere Name
tra virgolette.
Esempio InitialLearnRate=0.03,L2Regularization=0.0005,LearnRateSchedule="piecewise"
specifica la velocità di apprendimento iniziale uguale a 0,03 e il fattore di regolazione L2
uguale a 0,0005, indicando al software di ridurre la velocità di apprendimento ogni determinato numero di epoche moltiplicandola per un certo fattore.
Plots
— Grafici da visualizzare durante l’addestramento della rete neurale
'none'
(predefinito) | 'training-progress'
Grafici da visualizzare durante l’addestramento della rete neurale, specificati come uno dei seguenti:
'none'
: nessuna visualizzazione dei grafici durante l’addestramento.'training-progress'
: grafico dei progressi dell’addestramento. Il grafico mostra la perdita e la precisione del mini-batch, la perdita e la precisione della convalida e ulteriori informazioni sull'avanzamento dell'addestramento. Il grafico presenta un pulsante di arresto, situato nell'angolo in alto a destra. Fare clic sul pulsante per interrompere l'addestramento e ripristinare lo stato attuale della rete neurale. È possibile salvare il grafico di addestramento come immagine o come PDF facendo clic su Export Training Plot. Per ulteriori informazioni sul grafico dei progressi dell’addestramento, vedere Monitoraggio dei progressi dell’addestramento in Deep Learning.
Verbose
— Indicatore per la visualizzazione delle informazioni sui progressi dell’addestramento
1
(vero) (predefinito) | 0
(falso)
Indicatore per la visualizzazione delle informazioni sui progressi dell’addestramento nella finestra di comando, specificato come 1
(vero) o 0
(falso).
L’output verboso visualizza le informazioni seguenti:
Classificazione delle reti neurali
Campo | Descrizione |
---|---|
Epoch | Numero di epoche. Un’epoca corrisponde a un passaggio completo di dati. |
Iteration | Numero di iterazioni. Un’iterazione corrisponde a un mini-batch. |
Time Elapsed | Tempo trascorso in ore, minuti e secondi. |
Mini-batch Accuracy | Precisione della classificazione sul mini-batch. |
Validation Accuracy | Precisione della classificazione sui dati di convalida. Se non si specificano i dati di convalida, la funzione non visualizza questo campo. |
Mini-batch Loss | Perdita sul mini-batch. Se il livello di output è un oggetto ClassificationOutputLayer , la perdita corrisponde alla perdita di entropia incrociata per i problemi di classificazione multiclasse con classi che si escludono reciprocamente. |
Validation Loss | Perdita sui dati di convalida. Se il livello di output è un oggetto ClassificationOutputLayer , la perdita corrisponde alla perdita di entropia incrociata per i problemi di classificazione multiclasse con classi che si escludono reciprocamente. Se non si specificano i dati di convalida, la funzione non visualizza questo campo. |
Base Learning Rate | Velocità di apprendimento di base. Il software moltiplica i fattori della velocità di apprendimento dei livelli per questo valore. |
Regressione delle reti neurali
Campo | Descrizione |
---|---|
Epoch | Numero di epoche. Un’epoca corrisponde a un passaggio completo di dati. |
Iteration | Numero di iterazioni. Un’iterazione corrisponde a un mini-batch. |
Time Elapsed | Tempo trascorso in ore, minuti e secondi. |
Mini-batch RMSE | Radice dell'errore quadratico medio (RMSE) sul mini-batch. |
Validation RMSE | RMSE sui dati di convalida. Se non si specificano i dati di convalida, il software non visualizza questo campo. |
Mini-batch Loss | Perdita sul mini-batch. Se il livello di output è un oggetto RegressionOutputLayer , la perdita è la metà dell'errore quadratico medio. |
Validation Loss | Perdita sui dati di convalida. Se il livello di output è un oggetto RegressionOutputLayer , la perdita è la metà dell'errore quadratico medio. Se non si specificano i dati di convalida, il software non visualizza questo campo. |
Base Learning Rate | Velocità di apprendimento di base. Il software moltiplica i fattori della velocità di apprendimento dei livelli per questo valore. |
Quando l’apprendimento si arresta, l’output verboso visualizza il motivo dell’arresto.
Per specificare i dati di convalida, utilizzare l’opzione di addestramento ValidationData
.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
VerboseFrequency
— Frequenza di stampa del verboso
50
(predefinito) | intero positivo
Frequenza di stampa del verboso, che è il numero di iterazioni tra le stampe nella finestra di comando, specificato come un numero intero positivo. Questa opzione ha effetto solo quando l’opzione di addestramento Verbose
è 1
(vero).
Se si convalida la rete neurale durante l’addestramento, trainNetwork
stampa anche nella finestra di comando ogni volta che avviene una convalida.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
MaxEpochs
— Numero massimo di epoche
30
(predefinito) | intero positivo
Numero massimo di epoche da utilizzare per l’addestramento, specificato come un numero intero positivo.
Un’iterazione è uno passo intrapreso dall’algoritmo di discesa del gradiente verso la minimizzazione della funzione di perdita usando un mini-batch. Un’epoca è il passaggio completo dell'algoritmo di addestramento lungo l’intero set di addestramento.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
MiniBatchSize
— Dimensione del mini-batch
128
(predefinito) | intero positivo
Dimensione del mini-batch da utilizzare per ogni iterazione di addestramento, specificata come un numero intero positivo. Un mini-batch è un sottoinsieme del set di addestramento, utilizzato per valutare il gradiente della funzione di perdita e per aggiornare i pesi.
Se la dimensione del mini-batch non suddivide in modo uniforme il numero di campioni di addestramento, trainNetwork
scarta i dati di addestramento che non si adattano al mini-batch finale completo di ogni epoca.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Shuffle
— Opzione per il mescolamento dei dati
'once'
(predefinito) | 'never'
| 'every-epoch'
Opzione per il mescolamento dei dati, specificata come una delle seguenti:
'once'
: mescolamento dei dati di addestramento e di convalida una volta prima dell’addestramento.'never'
: nessun mescolamento dei dati.'every-epoch'
: mescolamento dei dati di addestramento prima di ogni epoca di addestramento e mescolamento dei dati di convalida prima di ogni convalida della rete neurale. Se la dimensione del mini-batch non suddivide in modo uniforme il numero di campioni di addestramento,trainNetwork
scarta i dati di addestramento che non si adattano al mini-batch finale completo di ogni epoca. Per evitare di scartare gli stessi dati per ogni epoca, impostare l’opzione di addestramentoShuffle
su'every-epoch'
.
ValidationData
— Dati da utilizzare per la convalida durante l’addestramento
[]
(predefinito) | datastore | tabella | array di celle
Dati da utilizzare per la convalida durante l’addestramento, specificati come []
, un datastore, una tabella o un array di celle contenente i predittori e le risposte di convalida.
Si possono specificare i predittori e le risposte di convalida utilizzando gli stessi formati supportati dalla funzione trainNetwork
. Si può specificare i dati di convalida come un datastore, una tabella o un array di celle {predictors,responses}
, dove predictors
contiene i predittori di convalida e responses
contiene le risposte di convalida.
Per ulteriori informazioni, vedere gli argomenti di input images
, sequences
e features
della funzione trainNetwork
.
Durante l’addestramento, trainNetwork
calcola la precisione della convalida e la perdita di convalida sui dati di convalida. Per specificare la frequenza di convalida, utilizzare l’opzione di addestramento ValidationFrequency
. È inoltre possibile utilizzare i dati di convalida per interrompere automaticamente l’addestramento quando la perdita di convalida smette di diminuire. Per abilitare l’arresto automatico della convalida, utilizzare l’opzione di addestramento ValidationPatience
.
Se la rete neurale è dotata di livelli che si comportano in modo diverso durante la previsione rispetto all’addestramento (ad esempio, i livelli di dropout), la precisione della convalida può essere superiore a quella di addestramento (mini-batch).
I dati di convalida vengono mescolati secondo l’opzione di addestramento Shuffle
. Se Shuffle
è 'every-epoch'
, i dati di convalida vengono mescolati prima di ogni convalida della rete neurale.
Se ValidationData
è []
, il software non convalida la rete neurale durante l’addestramento.
ValidationFrequency
— Frequenza di convalida della rete neurale
50
(predefinito) | intero positivo
Frequenza di convalida della rete neurale in numero di interazioni, specificata come un numero intero positivo.
Il valore ValidationFrequency
è il numero di iterazioni tra le valutazioni delle metriche di convalida. Per specificare i dati di convalida, utilizzare l’opzione di addestramento ValidationData
.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ValidationPatience
— Attesa dell’arresto della convalida
Inf
(predefinito) | intero positivo
Attesa dell’arresto della convalida dell’addestramento della rete neurale, specificata come un numero intero positivo o Inf
.
ValidationPatience
specifica il numero di volte in cui la perdita sul set di convalida può essere superiore o uguale alla perdita precedente più piccola, prima che l’addestramento della rete neurale si interrompa. Se ValidationPatience
è Inf
, i valori della perdita di convalida non causano un arresto precoce dell’addestramento.
La rete neurale ripristinata dipende dall’opzione di addestramento OutputNetwork
. Per ripristinare la rete neurale con la perdita di convalida più bassa, impostare l’opzione di addestramento OutputNetwork
su "best-validation-loss"
.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputNetwork
— Rete neurale da ripristinare al completamento dell’addestramento
'last-iteration'
(predefinito) | 'best-validation-loss'
Rete neurale da ripristinare al completamento dell’addestramento, specificata come uno dei seguenti:
'last-iteration'
: ripristino della rete neurale che corrisponde all’ultima iterazione di addestramento.'best-validation-loss'
: ripristino della rete neurale che corrisponde all’iterazione di addestramento con la perdita di convalida più bassa. Per utilizzare questa opzione, specificare l’opzione di addestramentoValidationData
.
InitialLearnRate
— Velocità di apprendimento iniziale
scalare positivo
Velocità di apprendimento iniziale usata per l’addestramento, specificata come uno scalare positivo.
Il valore predefinito è 0.01
per il solver 'sgdm'
e 0.001
per i solver 'rmsprop'
e 'adam'
.
Se la velocità di apprendimento è troppo bassa, l’addestramento può richiedere più tempo. Se la velocità di apprendimento è troppo alta, l’addestramento potrebbe raggiungere un risultato non ottimale o deviare.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
LearnRateSchedule
— Opzione per la riduzione della velocità di apprendimento durante l’addestramento
'none'
(predefinito) | 'piecewise'
Opzione per la riduzione della velocità di apprendimento durante l’addestramento, specificata come uno dei seguenti:
'none'
: la velocità di apprendimento resta costante durante l’addestramento.'piecewise'
: il software aggiorna la velocità di apprendimento ogni determinato numero di epoche moltiplicandola per un certo fattore. Utilizzare l’opzione di addestramentoLearnRateDropFactor
per specificare il valore di questo fattore. Utilizzare l’opzione di addestramentoLearnRateDropPeriod
per specificare il numero di epoche tra le moltiplicazioni.
LearnRateDropPeriod
— Numero di epoche per la riduzione della velocità di apprendimento
10
(predefinito) | intero positivo
Numero di epoche per la riduzione della velocità di apprendimento, specificata come numero intero positivo. Questa opzione è valida solo quando l’opzione di addestramento LearnRateSchedule
è 'piecewise'
.
Il software moltiplica la velocità di apprendimento globale per il fattore di riduzione ogni volta che passa il numero di epoche specificato. Specificare il fattore di riduzione utilizzando l’opzione di addestramento LearnRateDropFactor
.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
LearnRateDropFactor
— Fattore per la riduzione della velocità di apprendimento
0.1
(predefinito) | scalare da 0
a 1
Fattore per la riduzione della velocità di apprendimento, specificato come uno scalare da 0
a 1
. Questa opzione è valida solo quando l’opzione di addestramento LearnRateSchedule
è 'piecewise'
.
LearnRateDropFactor
è un fattore di moltiplicazione da applicare alla velocità di apprendimento ogni volta che passa un certo numero di epoche. Specificare il numero di epoche utilizzando l’opzione di addestramento LearnRateDropPeriod
.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
L2Regularization
— Fattore per la regolarizzazione L2
0.0001
(predefinito) | scalare non negativo
Fattore per la regolarizzazione L2 (decadimento dei pesi), specificato come scalare non negativo. Per ulteriori informazioni, vedere Regolarizzazione L2.
Si può specificare un moltiplicatore per la regolarizzazione L2 per i livelli della rete neurale con parametri apprendibili. Per ulteriori informazioni, vedere Set Up Parameters in Convolutional and Fully Connected Layers.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Momentum
— Contributo della fase precedente
0.9
(predefinito) | scalare da 0
a 1
Contributo della fase di aggiornamento dei parametri dell’iterazione precedente a quella attuale della discesa stocastica del gradiente con momento, specificato come uno scalare da 0
a 1
.
Un valore di 0
indica l’assenza di contributo dalla fase precedente, mentre un valore di 1
indica un contributo massimo dalla fase precedente. Il valore predefinito funziona bene per la maggior parte delle attività.
Per specificare l’opzione di addestramento Momentum
, solverName
deve essere 'sgdm'
.
Per ulteriori informazioni, vedere Discesa stocastica del gradiente con momento.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
GradientDecayFactor
— Velocità di decadimento della media mobile del gradiente
0.9
(predefinito) | scalare non negativo inferiore a 1
Velocità di decadimento della media mobile del gradiente per il solver Adam, specificata come uno scalare non negativo inferiore a 1
. La velocità di decadimento del gradiente è indicata da β1
nella sezione Adam.
Per specificare l’opzione di addestramento GradientDecayFactor
, solverName
deve essere 'adam'
.
Il valore predefinito funziona bene per la maggior parte delle attività.
Per ulteriori informazioni, vedere Adam.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SquaredGradientDecayFactor
— Velocità di decadimento della media mobile del gradiente quadratico
scalare non negativo inferiore a 1
Velocità di decadimento della media mobile del gradiente quadratico per i solver Adam e RMSProp, specificata come uno scalare non negativo inferiore a 1
. La velocità di decadimento del gradiente quadratico è indicata con β2
in [4].
Per specificare l’opzione di addestramento SquaredGradientDecayFactor
, solverName
deve essere 'adam'
o 'rmsprop'
.
Valori tipici della velocità di decadimento 0.9
, 0.99
e 0.999
, che corrispondono rispettivamente alle lunghezze medie degli aggiornamenti dei parametri 10
, 100
e 1000
.
Il valore predefinito per il solver Adam è 0.999
. Il valore predefinito per il solver RMSProp è 0.9
.
Per ulteriori informazioni, vedere Adam e RMSProp.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Epsilon
— Offset del denominatore
1e-8
(predefinito) | scalare positivo
Offset del denominatore per i solver Adam e RMSProp, specificato come uno scalare positivo.
Il solver aggiunge l’offset al denominatore negli aggiornamenti dei parametri della rete neurale per evitare una divisione per zero. Il valore predefinito funziona bene per la maggior parte delle attività.
Per specificare l’opzione di addestramento Epsilon
, solverName
deve essere 'adam'
o 'rmsprop'
.
Per ulteriori informazioni, vedere Adam e RMSProp.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ResetInputNormalization
— Opzione per ripristinare la normalizzazione del livello di input
1
(vero) (predefinito) | 0
(falso)
Opzione per ripristinare la normalizzazione del livello di input, specificata come uno dei seguenti:
1
(vero): ripristino delle statistiche della normalizzazione del livello di input e ricalcolo al momento dell'addestramento.0
(falso): calcolo delle statistiche della normalizzazione al momento dell'addestramento quando queste sono vuote.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
BatchNormalizationStatistics
— Modalità per valutare le statistiche nei livelli di normalizzazione batch
'population'
(predefinito) | 'moving'
Modalità per valutare le statistiche nei livelli di normalizzazione batch, specificata come uno dei seguenti:
'population'
: utilizzo delle statistiche sulla popolazione. Dopo l'addestramento, il software finalizza le statistiche passando ancora una volta per i dati di addestramento e utilizza la media e la varianza risultanti.'moving'
– Approssimazione delle statistiche durante l’addestramento utilizzando una stima corrente data dalle fasi di aggiornamento, dove e indicano rispettivamente la media aggiornata e la varianza, e indicano rispettivamente i valori di decadimento della media e della varianza, e indicano rispettivamente la media e la varianza del livello di input e e indicano rispettivamente i valori più recenti della media mobile e della varianza. Dopo l'addestramento, il software utilizza il valore più recente delle statistiche della media mobile e della varianza. Questa opzione supporta unicamente l’addestramento di CPU e GPU singole.
GradientThreshold
— Soglia del gradiente
Inf
(predefinito) | scalare positivo
Soglia del gradiente, specificata come Inf
o uno scalare positivo. Se il gradiente supera il valore di GradientThreshold
, il gradiente viene ridimensionato secondo l’opzione di addestramento GradientThresholdMethod
.
Per ulteriori informazioni, vedere Gradient Clipping (Ridimensionamento del gradiente).
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
GradientThresholdMethod
— Metodo di soglia del gradiente
'l2norm'
(predefinito) | 'global-l2norm'
| 'absolute-value'
Metodo di soglia del gradiente usato per ridimensionare i valori del gradiente che superano la soglia, specificato come uno dei seguenti:
'l2norm'
: se la norma L2 del gradiente di un parametro apprendibile è superiore aGradientThreshold
, ridimensionare il gradiente affinché la norma L2 sia uguale aGradientThreshold
.'global-l2norm'
: se la norma globale L2, L, è superiore aGradientThreshold
, ridimensionare tutti i gradienti di un fattore diGradientThreshold/
L. La norma globale L2 tiene in considerazione tutti i parametri apprendibili.'absolute-value'
: se il valore assoluto di una singola derivata parziale nel gradiente di un parametro apprendibile è superiore aGradientThreshold
, ridimensionare la derivata parziale affinché abbia una magnitudine uguale aGradientThreshold
e conservi il segno della derivata parziale.
Per ulteriori informazioni, vedere Gradient Clipping (Ridimensionamento del gradiente).
SequenceLength
— Opzione per riempire o troncare le sequenze
"longest"
(predefinito) | "shortest"
| intero positivo
Opzione per riempire, troncare o suddividere le sequenze di input, specificata come uno dei seguenti:
"longest"
: riempimento delle sequenze in ogni mini-batch in modo che abbiano la stessa lunghezza della sequenza più lunga. Questa opzione non scarta nessun dato, sebbene il riempimento possa introdurre rumore nella rete neurale."shortest"
: troncamento delle sequenze in ogni mini-batch in modo che abbiano la stessa lunghezza della sequenza più corta. Questa opzione garantisce che non venga aggiunto alcun riempimento, con il rischio di scartare dei dati.Intero positivo: per ogni mini-batch, riempie le sequenze fino a raggiungere la lunghezza della sequenza più lunga nel mini-batch e suddivide le sequenze in sequenze più brevi della lunghezza specificata. In caso di suddivisione, il software crea ulteriori mini-batch. Se la lunghezza della sequenza specificata non suddivide in modo uniforme le lunghezze della sequenza dei dati, i mini-batch che contengono le estremità di quelle sequenze hanno lunghezze più brevi rispetto alla lunghezza della sequenza specificata. Utilizzare questa opzione se le sequenze complete non entrano nella memoria. In alternativa, provare a ridurre il numero di sequenze per mini-batch impostando l’opzione
MiniBatchSize
su un valore inferiore.
Per saperne di più sugli effetti di riempimento, troncamento e suddivisione delle sequenze di input, vedere Sequence Padding, Truncation, and Splitting.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
SequencePaddingDirection
— Direzione di inserimento o troncamento
"right"
(predefinito) | "left"
Direzione di inserimento o troncamento, specificata come uno dei seguenti:
"right"
: riempimento o troncamento delle sequenze a destra. Le sequenze hanno inizio nella stessa fase temporale e il software tronca o aggiunge riempimenti al termine delle sequenze."left"
: riempimento o troncamento delle sequenze a sinistra. Il software tronca o aggiunge riempimenti all’inizio delle sequenze in modo tale che queste terminino nella stessa fase temporale.
Dato che i livelli ricorrenti elaborano i dati sequenziali una fase temporale alla volta, quando la proprietà OutputMode
del livello ricorrente è 'last'
, qualsiasi riempimento nelle fasi temporali finali può influire negativamente sull’output del livello. Per riempire o troncare i dati sequenziali a sinistra, impostare l’opzione SequencePaddingDirection
su "left"
.
Per le reti neurali sequenza-sequenza (quando la proprietà OutputMode
è 'sequence'
per ogni livello ricorrente), qualsiasi riempimento nelle fasi temporali iniziali può influire negativamente sulle previsioni per le fasi temporali precedenti. Per riempire o troncare i dati sequenziali a destra, impostare l’opzione SequencePaddingDirection
su "right"
.
Per saperne di più sugli effetti di riempimento, troncamento e suddivisione delle sequenze di input, vedere Sequence Padding, Truncation, and Splitting.
SequencePaddingValue
— Valore per riempire le sequenze
0
(predefinito) | scalare
Valore in base al quale riempire le sequenze di input, specificato come uno scalare.
L’opzione è valida solo quando SequenceLength
è "longest"
o un numero intero positivo. Non riempire le sequenze con NaN
, perché altrimenti si potrebbero produrre errori in tutta la rete neurale.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ExecutionEnvironment
— Risorsa hardware per l’addestramento della rete neurale
'auto'
(predefinito) | 'cpu'
| 'gpu'
| 'multi-gpu'
| 'parallel'
Risorsa hardware per l’addestramento della rete neurale, specificata come uno dei seguenti:
'auto'
: utilizzo di una GPU, se disponibile. Altrimenti, utilizzo della CPU.'cpu'
: utilizzo della CPU.'gpu'
: utilizzo della GPU.'multi-gpu'
: utilizzo di più GPU su una macchina, usando un pool parallelo locale basato sul profilo cluster predefinito. In caso di assenza di un pool parallelo attuale, il software avvia un pool parallelo con una dimensione pari al numero di GPU disponibili.'parallel'
: utilizzo di un pool parallelo locale o remoto basato sul profilo cluster predefinito. In caso di assenza di un pool parallelo attuale, il software ne avvia uno utilizzando il profilo cluster predefinito. Se il pool ha accesso alle GPU, unicamente i worker con una sola GPU possono eseguire il calcolo per l’addestramento. Se il pool non ha GPU, l’addestramento avviene invece su tutti i worker della CUP disponibili.
Per ulteriori informazioni su quando utilizzare i diversi ambienti di esecuzione, vedere Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.
Le opzioni 'gpu'
, 'multi-gpu'
e 'parallel'
richiedono Parallel Computing Toolbox™. Per utilizzare una GPU per il Deep Learning, occorre avere anche un dispositivo GPU supportato. Per informazioni sui dispositivi supportati, vedere GPU Computing Requirements (Parallel Computing Toolbox). Se si sceglie una di queste opzioni e Parallel Computing Toolbox o se una GPU adatta non è disponibile, il software restituisce un errore.
Per vedere un miglioramento nelle performance durante l’addestramento in parallelo, cercare di ridimensionare le opzioni di addestramento MiniBatchSize
e InitialLearnRate
del numero di GPU.
Le opzioni 'multi-gpu'
e 'parallel'
non supportano le reti neurali che contengono livelli personalizzati con parametri di stato o livelli integrati che sono stateful al momento dell'addestramento. Ad esempio:
Livelli ricorrenti come gli oggetti
LSTMLayer
,BiLSTMLayer
oGRULayer
quando l’opzione di addestramentoSequenceLength
è un numero intero positivoGli oggetti
BatchNormalizationLayer
quando l’opzione di addestramentoBatchNormalizationStatistics
è impostata su'moving'
WorkerLoad
— Divisione del carico del worker in parallelo
scalare da 0
a 1
| intero positivo | vettore numerico
Divisione del carico del worker in parallelo tra GPU o CPU, specificata come uno dei seguenti:
Scalare da
0
a1
: frazione di worker su ogni macchina da utilizzare per il calcolo per l’addestramento della rete neurale. Se la rete neurale viene addestrata usando i dati in un datastore di mini-batch con un dispatch in background abilitato, i worker rimanenti prendono e pre-elaborano i dati in background.Numero intero positivo: numero di worker su ogni macchina da utilizzare per il calcolo dell’addestramento della rete neurale. Se la rete neurale viene addestrata usando i dati in un datastore di mini-batch con un dispatch in background abilitato, i worker rimanenti prendono e pre-elaborano i dati in background.
Vettore numerico: carico di addestramento della rete neurale per ogni worker nel pool parallelo. Per un vettore
W
, il workeri
ottiene una frazioneW(i)/sum(W)
del lavoro (numero di esempi per mini-batch). Se la rete neurale viene addestrata utilizzando i dati in un datastore di mini-batch con un dispatch in background abilitato, è possibile assegnare un carico del worker di 0 da utilizzare affinché il worker recuperi i dati in background. Il vettore specificato deve contenere un valore per worker nel pool parallelo.
Se il pool parallelo ha accesso alle GPU, i worker senza una GPU unica non sono mai usati per il calcolo per l’addestramento. Per impostazione predefinita, per i pool con GPU si usano tutti i worker con una GPU unica per il calcolo dell’addestramento e i worker rimanenti per il dispatch in background. Se il pool non ha accesso alle GPU e per l’addestramento sono utilizzate le CPU, per impostazione predefinita si usa un worker per macchina per il dispatch dei dati in background.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DispatchInBackground
— Contrassegno per l’abilitazione del dispatch in background
0
(falso) (predefinito) | 1
(vero)
Contrassegno per l’abilitazione del dispatch in background (coda di prefetch asincrono) per leggere i dati di addestramento dai datastore, specificato come 0
(falso) o 1
(vero). Il dispatch in background richiede Parallel Computing Toolbox.
DispatchInBackground
è supportato solo per i datastore che sono partizionabili. Per ulteriori informazioni, vedere Use Datastore for Parallel Training and Background Dispatching.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
CheckpointPath
— Percorso per salvare le reti neurali con checkpoint
""
(predefinito) | vettore di carattere
Percorso per salvare le reti neurali con checkpoint, specificato come un vettore di carattere o uno scalare di stringa.
Se non si specifica un percorso (ossia si usa il
""
predefinito), il software non salva nessuna rete neurale con checkpoint.Se si specifica un percorso,
trainNetwork
salva le reti neurali con checkpoint in questo percorso e assegna un nome univoco a ogni rete neurale. È quindi possibile caricare qualsiasi rete neurale con checkpoint e riprendere l’addestramento da quella rete neurale.Se la cartella non esiste, occorre innanzitutto crearla prima di specificare il percorso per salvare le reti neurali con checkpoint. Se il percorso specificato non esiste,
trainingOptions
restituisce un errore.
Le opzioni CheckpointFrequency
e CheckpointFrequencyUnit
specificano la frequenza di salvataggio delle reti neurali con checkpoint.
Per ulteriori informazioni sul salvataggio dei checkpoint della rete neurale, vedere Save Checkpoint Networks and Resume Training.
Tipi di dati: char
| string
CheckpointFrequency
— Frequenza di salvataggio delle reti neurali con checkpoint
1
(predefinito) | intero positivo
Frequenza di salvataggio delle reti neurali con checkpoint, specificata come un numero intero positivo.
Se CheckpointFrequencyUnit
è 'epoch'
, il software salva le reti neurali con checkpoint ogni CheckpointFrequency
epoche.
Se CheckpointFrequencyUnit
è 'iteration'
, il software salva le reti neurali con checkpoint ogni CheckpointFrequency
iterazioni.
Questa opzione ha effetto solo quando CheckpointPath
non è vuoto.
Tipi di dati: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
CheckpointFrequencyUnit
— Unità di frequenza del checkpoint
'epoch'
(predefinito) | 'iteration'
Unità di frequenza del checkpoint, specificata come 'epoch'
o 'iteration'
.
Se CheckpointFrequencyUnit
è 'epoch'
, il software salva le reti neurali con checkpoint ogni CheckpointFrequency
epoche.
Se CheckpointFrequencyUnit
è 'iteration'
, il software salva le reti neurali con checkpoint ogni CheckpointFrequency
iterazioni.
Questa opzione ha effetto solo quando CheckpointPath
non è vuoto.
OutputFcn
— Funzioni di output
handle delle funzioni | array di celle degli handle delle funzioni
Funzioni di output da chiamare durante l’addestramento, specificate come un handle delle funzioni o un array di celle degli handle delle funzioni. trainNetwork
chiama le funzioni specificate una volta prima dell’avvio dell’addestramento, dopo ogni iterazione e una volta al termine dell’addestramento. trainNetwork
passa una struttura che contiene informazioni nei campi seguenti:
Campo | Descrizione |
---|---|
Epoch | Numero di epoche attuale |
Iteration | Numero di iterazioni attuale |
TimeSinceStart | Tempo in secondi dall’avvio dell’addestramento |
TrainingLoss | Perdita del mini-batch attuale |
ValidationLoss | Perdita sui dati di convalida |
BaseLearnRate | Velocità di apprendimento di base attuale |
TrainingAccuracy | Precisione sul mini-batch attuale (classificazione delle reti neurali) |
TrainingRMSE | RMSE sul mini-batch attuale (regressione delle reti neurali) |
ValidationAccuracy | Precisione sui dati di convalida (classificazione delle reti neurali) |
ValidationRMSE | RMSE sui dati di convalida (regressione delle reti neurali) |
State | Stato di addestramento attuale, con un possibile valore di "start" , "iteration" o "done" . |
Se un campo non viene calcolato o non è pertinente per una certa chiamata delle funzioni di output, tale campo contiene un array vuoto.
È possibile utilizzare le funzioni di output per visualizzare o tracciare le informazioni sui progressi o per arrestare l’addestramento. Per interrompere l’addestramento in anticipo, far sì che la funzione di output restituisca 1
(vero). Se una funzione di output restituisce 1
(vero), l’addestramento termina e trainNetwork
restituisce la rete neurale più recente. Per un esempio di utilizzo delle funzioni di output, vedere Customize Output During Deep Learning Network Training.
Tipi di dati: function_handle
| cell
Argomenti di output
options
— Opzioni di addestramento
TrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
Opzioni di addestramento, restituite come un oggetto TrainingOptionsSGDM
, TrainingOptionsRMSProp
o TrainingOptionsADAM
. Per addestrare una rete neurale, utilizzare le opzioni di addestramento come un argomento di input nella funzione trainNetwork
.
Se solverName
è 'sgdm'
, 'rmsprop'
o 'adam'
, le opzioni di addestramento vengono restituite rispettivamente come un oggetto TrainingOptionsSGDM
, TrainingOptionsRMSProp
o TrainingOptionsADAM
.
È possibile modificare direttamente le proprietà delle opzioni di addestramento degli oggetti TrainingOptionsSGDM
, TrainingOptionsADAM
e TrainingOptionsRMSProp
. Ad esempio, per cambiare la dimensione del mini-batch dopo aver utilizzato la funzione trainingOptions
, è possibile modificare direttamente la proprietà MiniBatchSize
:
options = trainingOptions('sgdm'); options.MiniBatchSize = 64;
Suggerimenti
Per la maggior parte delle attività di Deep Learning, è possibile utilizzare una rete neurale preaddestrata e adattarla ai propri dati. Per un esempio su come utilizzare il transfer learning per riaddestrare una rete neurale convoluzionale per classificare un nuovo set di immagini, vedere Addestramento della rete di Deep Learning per classificare nuove immagini. In alternativa, è possibile creare e addestrare reti neurali da zero usando gli oggetti
layerGraph
con le funzionitrainNetwork
etrainingOptions
.Se la funzione
trainingOptions
non fornisce le opzioni di addestramento necessarie per l’attività, è possibile creare un loop di addestramento personalizzato usando la differenziazione automatica. Per saperne di più, vedere Define Deep Learning Network for Custom Training Loops.
Algoritmi
Pesi e bias iniziali
Per i livelli convoluzionali e completamente connessi, l’inizializzazione dei pesi e dei bias è data rispettivamente dalle proprietà dei livelli WeightsInitializer
e BiasInitializer
. Per esempi che mostrano come modificare l’inizializzazione dei pesi e dei bias, vedere Specify Initial Weights and Biases in Convolutional Layer e Specify Initial Weights and Biases in Fully Connected Layer.
Discesa stocastica del gradiente
L’algoritmo di discesa del gradiente standard aggiorna i parametri della rete (pesi e bias) per minimizzare la funzione di perdita spostandosi di poco a ogni iterazione nella direzione del gradiente negativo della perdita,
dove è il numero di iterazioni, è la velocità di apprendimento, è il vettore del parametro e è la funzione di perdita. Nell’algoritmo di discesa del gradiente standard, il gradiente della funzione di perdita, , viene valutato usando l’intero set di addestramento e l’algoritmo di discesa del gradiente standard usa subito l’intero set di dati.
Invece, a ogni iterazione l’algoritmo di discesa stocastica del gradiente valuta il gradiente e aggiorna i parametri utilizzando un sottoinsieme dei dati di addestramento. A ogni iterazione viene usato un sottoinsieme diverso, chiamato mini-batch. Un passaggio completo dell'algoritmo di addestramento lungo l’intero set di addestramento usando mini-batch è un’epoca. La discesa stocastica del gradiente è stocastica perché gli aggiornamenti dei parametri calcolati usando un mini-batch sono una stima del rumore dell’aggiornamento dei parametri che risulterebbe usando l’intero set di dati. Si può specificare la dimensione del mini-batch e il numero massimo di epoche usando rispettivamente le opzioni di addestramento MiniBatchSize
e MaxEpochs
.
Discesa stocastica del gradiente con momento
L’algoritmo di discesa stocastica del gradiente può oscillare lungo il percorso di discesa più ripida verso il valore ottimale. Aggiungere un termine di momento all’aggiornamento dei parametri è un modo per ridurre questa oscillazione [2]. L’aggiornamento della discesa stocastica del gradiente con momento (SGDM) è
, dove determina il contributo della fase del gradiente precedente nell’iterazione attuale. È possibile specificare questo valore usando l’opzione di addestramento Momentum
. Per addestrare una rete neurale usando l’algoritmo di discesa stocastica del gradiente con momento, specificare 'sgdm'
come primo argomento di input su trainingOptions
. Per specificare il valore iniziale della velocità di apprendimento α, utilizzare l’opzione di addestramento InitialLearnRate
. È inoltre possibile specificare diverse velocità di apprendimento per livelli e parametri diversi. Per ulteriori informazioni, vedere Set Up Parameters in Convolutional and Fully Connected Layers.
RMSProp
La discesa stocastica del gradiente con momento usa un’unica velocità di apprendimento per tutti i parametri. Gli altri algoritmi di ottimizzazione cercano di migliorare l’addestramento della rete usando velocità di apprendimento diverse per parametro e possono adattarsi automaticamente alla funzione di perdita ottimizzata. RMSProp (Root Mean Square Propagation) è un algoritmo di questo tipo. Mantiene una media mobile dei quadrati elemento per elemento dei gradienti dei parametri,
β2 è la velocità di decadimento della media mobile. Valori comuni della velocità di decadimento sono 0,9, 0,99 e 0,999. Le lunghezze medie corrispondenti dei gradienti quadratici uguali a 1/(1-β2), ossia rispettivamente gli aggiornamenti dei parametri 10, 100 e 1000. È possibile specificare β2 usando le opzioni di addestramento SquaredGradientDecayFactor
. L’algoritmo RMSProp usa questa media mobile per normalizzare gli aggiornamenti di ogni parametro singolarmente,
dove la divisione avviene elemento per elemento. Utilizzare RMSProp in modo efficace riduce le velocità di apprendimento dei parametri con gradienti grandi e aumenta i parametri di apprendimento dei parametri con gradienti piccoli. ɛ è una costante ridotta aggiunta per evitare una divisione per zero. È possibile specificare ɛ usando l’opzione di addestramento Epsilon
, ma il valore predefinito di solito funziona bene. Per utilizzare RMSProp per addestrare una rete neurale, specificare 'rmsprop'
come primo input su trainingOptions
.
Adam
Adam (derivato da una stima del momento adattivo) [4] usa un aggiornamento dei parametri simile a RMSProp, ma con un termine di momento aggiunto. Mantiene una media mobile elemento per elemento dei gradienti dei parametri e dei relativi valori quadratici,
Si possono specificare le velocità di decadimento β1 e β2 usando rispettivamente le opzioni di addestramento GradientDecayFactor
e SquaredGradientDecayFactor
. Adam utilizza le medie mobili per aggiornare i parametri di rete come
Se i gradienti di diverse iterazioni sono simili, utilizzare una media mobile del gradiente permette agli aggiornamenti dei parametri di acquisire un momento in una certa direzione. Se i gradienti contengono soprattutto rumore, la media mobile del gradiente si riduce e di conseguenza si riducono anche gli aggiornamenti dei parametri. È possibile specificare ɛ usando l’opzione di addestramento Epsilon
. Il valore predefinito di solito funziona bene, ma per alcuni problemi funziona meglio un valore maggiore di 1. Per utilizzare Adam per addestrare una rete neurale, specificare 'adam'
come primo input su trainingOptions
. L’aggiornamento di Adam completo include anche un meccanismo per correggere un bias che compare all’inizio dell’addestramento. Per ulteriori informazioni, vedere [4].
Specificare la velocità di apprendimento α per tutti gli algoritmi di ottimizzazione usando l’opzione di addestramento InitialLearnRate
. L’effetto della velocità di apprendimento è diverso per i vari algoritmi di ottimizzazione, quindi anche le velocità di apprendimento in generale sono diverse. È inoltre possibile specificare velocità di apprendimento diverse per livelli e per parametro. Per ulteriori informazioni, vedere Set Up Parameters in Convolutional and Fully Connected Layers.
Ridimensionamento del gradiente
Se i gradienti aumentano esponenzialmente in magnitudine, l’addestramento è instabile e può deviare nel giro di qualche iterazione. Questa “esplosione del gradiente” è indicata da una perdita di addestramento che va verso NaN
o Inf
. Il ridimensionamento del gradiente aiuta a evitare l’esplosione del gradiente stabilizzando l’addestramento a velocità di apprendimento superiori e in presenza di outlier [3]. Il ridimensionamento del gradiente permette alle reti di essere addestrate più velocemente e di solito non influisce sulla precisione dell’attività appresa.
Esistono due tipi di ridimensionamento del gradiente.
Il ridimensionamento del gradiente basato sulla norma ridimensiona il gradiente in base a una soglia e non modifica la direzione del gradiente. I valori
'l2norm'
e'global-l2norm'
diGradientThresholdMethod
sono metodi di ridimensionamento del gradiente basato sulla norma.Il ridimensionamento del gradiente basato sul valore ridimensiona una derivata parziale superiore alla soglia, che può risultare in un cambiamento arbitrario di direzione del gradiente. Il ridimensionamento del gradiente basato sul valore può avere un comportamento imprevedibile, ma cambiamenti sufficientemente piccoli non causano la deviazione della rete. Il valore
'absolute-value'
diGradientThresholdMethod
è un metodo di ridimensionamento del gradiente basato sul valore.
Regolarizzazione L2
Aggiungere un termine di regolarizzazione per i pesi alla funzione di perdita è un modo per ridurre il sovraadattamento [1], [2]. Il termine di regolarizzazione è chiamato anche decadimento dei pesi. La funzione di perdita con il termine di regolarizzazione assume la forma
dove è il vettore di peso, è il fattore di regolarizzazione (coefficiente) e la funzione di regolarizzazione è
Si noti che i bias non sono regolarizzati [2]. È possibile specificare il fattore di regolarizzazione usando l’opzione di addestramento L2Regularization
. È inoltre possibile specificare diversi fattori di regolarizzazione per livelli e parametri diversi. Per ulteriori informazioni, vedere Set Up Parameters in Convolutional and Fully Connected Layers.
La funzione di perdita che il software usa per l’addestramento della rete include il termine di regolarizzazione. Tuttavia, il valore di perdita visualizzato nella finestra di comando e nel grafico dei progressi dell’addestramento durante l’addestramento indica unicamente la perdita sui dati e non include il termine di regolarizzazione.
Riferimenti
[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).
Cronologia versioni
Introdotto in R2016aR2022b: trainNetwork
riempie i mini-batch fino a raggiungere la lunghezza della sequenza più lunga prima della suddivisione quando si specifica l’opzione di addestramento SequenceLength
come un numero intero
Cominciando da R2022b, quando si addestra una rete neurale con dati sequenziali che utilizzano la funzione trainNetwork
e l’opzione SequenceLength
è un numero intero, il software riempie le sequenze fino a raggiungere la lunghezza della sequenza più lunga in ogni mini-batch, quindi suddividere le sequenze in mini-batch della lunghezza della sequenza specificata. Se SequenceLength
non suddivide in modo uniforme la lunghezza della sequenza del mini-batch, l’ultimo mini-batch diviso ha una lunghezza inferiore a SequenceLength
. Questo comportamento impedisce l’addestramento della rete neurale su fasi temporali che contengono solo valori di riempimento.
In release precedenti, il software riempie i mini-batch delle sequenze affinché abbiano una lunghezza corrispondente al multiplo più vicino di SequenceLength
che è maggiore o uguale alla lunghezza del mini-batch e poi suddivide i dati. Per riprodurre questo comportamento, utilizzare un loop di addestramento personalizzato e implementare questo comportamento quando si pre-elaborano i mini-batch dei dati.
R2018b: L’opzione di addestramento ValidationPatience
predefinita è Inf
Cominciando da R2018b, il valore predefinito dell’opzione di addestramento ValidationPatience
è Inf
, ad indicare che l’arresto automatico per mezzo della convalida è disabilitato. Questo comportamento impedisce che l’addestramento si interrompa prima di un apprendimento sufficiente dei dati.
Nelle versioni precedenti, il valore predefinito è 5
. Per riprodurre questo comportamento, impostare l’opzione ValidationPatience
su 5
.
R2018b: Nome del file diverso per le reti con checkpoint
Cominciando da R2018b, quando si salvano delle reti con checkpoint, il software assegna i nomi dei file iniziando da net_checkpoint_
. Nelle versioni precedenti, il software assegna i nomi dei file iniziando da convnet_checkpoint_
.
Se si possiede un codice che salva e carica le reti con checkpoint, aggiornare il codice per caricare i file con il nuovo nome.
Vedi anche
trainNetwork
| analyzeNetwork
| Deep Network Designer
Argomenti
- Creazione di una rete neurale semplice di Deep Learning per la classificazione
- Transfer learning utilizzando una rete preaddestrata
- Resume Training from Checkpoint Network
- Deep Learning con Big Data su CPU, GPU, in parallelo e nel cloud
- Specify Layers of Convolutional Neural Network
- Set Up Parameters and Train Convolutional Neural Network
- Define Custom Training Loops, Loss Functions, and Networks
Apri esempio
Si dispone di una versione modificata di questo esempio. Desideri aprire questo esempio con le tue modifiche?
Comando MATLAB
Hai fatto clic su un collegamento che corrisponde a questo comando MATLAB:
Esegui il comando inserendolo nella finestra di comando MATLAB. I browser web non supportano i comandi 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)