Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

trainingOptions

Opzioni per l’addestramento della rete neurale di Deep Learning

Descrizione

esempio

options = trainingOptions(solverName) restituisce le opzioni di addestramento per l'ottimizzatore specificato da solverName. Per addestrare una rete neurale, utilizzare le opzioni di addestramento come un argomento di input nella funzione trainNetwork.

esempio

options = trainingOptions(solverName,Name=Value) restituisce le opzioni di addestramento con ulteriori opzioni specificate da uno o più argomenti nome-valore.

Esempi

comprimi tutto

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'

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 .

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);

Figure Training Progress (23-Mar-2023 10:35:30) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 15 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 15 objects of type patch, text, line.

Argomenti di input

comprimi tutto

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 addestramento Momentum.

  • 'rmsprop': utilizzo dell’ottimizzatore RMSProp. Si può specificare la velocità di decadimento della media mobile del gradiente quadratico usando l’opzione di addestramento SquaredGradientDecayFactor.

  • '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 addestramento GradientDecayFactor e SquaredGradientDecayFactor.

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.

Grafici e visualizzazione

comprimi tutto

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.

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

CampoDescrizione
EpochNumero di epoche. Un’epoca corrisponde a un passaggio completo di dati.
IterationNumero di iterazioni. Un’iterazione corrisponde a un mini-batch.
Time ElapsedTempo trascorso in ore, minuti e secondi.
Mini-batch AccuracyPrecisione della classificazione sul mini-batch.
Validation AccuracyPrecisione della classificazione sui dati di convalida. Se non si specificano i dati di convalida, la funzione non visualizza questo campo.
Mini-batch LossPerdita 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 LossPerdita 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 RateVelocità di apprendimento di base. Il software moltiplica i fattori della velocità di apprendimento dei livelli per questo valore.

Regressione delle reti neurali

CampoDescrizione
EpochNumero di epoche. Un’epoca corrisponde a un passaggio completo di dati.
IterationNumero di iterazioni. Un’iterazione corrisponde a un mini-batch.
Time ElapsedTempo trascorso in ore, minuti e secondi.
Mini-batch RMSERadice dell'errore quadratico medio (RMSE) sul mini-batch.
Validation RMSERMSE sui dati di convalida. Se non si specificano i dati di convalida, il software non visualizza questo campo.
Mini-batch LossPerdita sul mini-batch. Se il livello di output è un oggetto RegressionOutputLayer, la perdita è la metà dell'errore quadratico medio.
Validation LossPerdita 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 RateVelocità 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

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

Opzioni del mini-batch

comprimi tutto

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

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

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 addestramento Shuffle su 'every-epoch'.

Convalida

comprimi tutto

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.

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

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

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 addestramento ValidationData.

Opzioni del Solver

comprimi tutto

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

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 addestramento LearnRateDropFactor per specificare il valore di questo fattore. Utilizzare l’opzione di addestramento LearnRateDropPeriod per specificare il numero di epoche tra le moltiplicazioni.

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

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

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 .

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

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

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

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

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

    μ*=λμμ^+(1λμ)μσ2*=λσ2σ2^+(1-λσ2)σ2

    , dove μ* e σ2* indicano rispettivamente la media aggiornata e la varianza, λμ e λσ2 indicano rispettivamente i valori di decadimento della media e della varianza, μ^ e σ2^ indicano rispettivamente la media e la varianza del livello di input e μ e σ2 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.

Ridimensionamento del gradiente

comprimi tutto

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

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 a GradientThreshold, ridimensionare il gradiente affinché la norma L2 sia uguale a GradientThreshold.

  • 'global-l2norm': se la norma globale L2, L, è superiore a GradientThreshold, ridimensionare tutti i gradienti di un fattore di GradientThreshold/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 a GradientThreshold, ridimensionare la derivata parziale affinché abbia una magnitudine uguale a GradientThreshold e conservi il segno della derivata parziale.

Per ulteriori informazioni, vedere Gradient Clipping (Ridimensionamento del gradiente).

Opzioni di sequenza

comprimi tutto

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 and Truncation.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

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 and Truncation.

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

Opzioni hardware

comprimi tutto

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:

Divisione del carico del worker in parallelo tra GPU o CPU, specificata come uno dei seguenti:

  • Scalare da 0 a 1: 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 worker i ottiene una frazione W(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

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 Preprocessing.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Checkpoint

comprimi tutto

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 .

Tipi di dati: char | string

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

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.

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:

CampoDescrizione
EpochNumero di epoche attuale
IterationNumero di iterazioni attuale
TimeSinceStartTempo in secondi dall’avvio dell’addestramento
TrainingLossPerdita del mini-batch attuale
ValidationLossPerdita sui dati di convalida
BaseLearnRateVelocità di apprendimento di base attuale
TrainingAccuracy Precisione sul mini-batch attuale (classificazione delle reti neurali)
TrainingRMSERMSE sul mini-batch attuale (regressione delle reti neurali)
ValidationAccuracyPrecisione sui dati di convalida (classificazione delle reti neurali)
ValidationRMSERMSE sui dati di convalida (regressione delle reti neurali)
StateStato 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 .

Tipi di dati: function_handle | cell

Argomenti di output

comprimi tutto

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

Algoritmi

comprimi tutto

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,

θ+1=θαE(θ),

dove è il numero di iterazioni, α>0 è la velocità di apprendimento, θ è il vettore del parametro e E(θ) è la funzione di perdita. Nell’algoritmo di discesa del gradiente standard, il gradiente della funzione di perdita, E(θ), 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) è

θ+1=θαE(θ)+γ(θθ1),

, 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 .

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,

v=β2v1+(1β2)[E(θ)]2

β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,

θ+1=θαE(θ)v+ϵ

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,

m=β1m1+(1β1)E(θ)

v=β2v1+(1β2)[E(θ)]2

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

θ+1=θαmlvl+ϵ

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 .

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' di GradientThresholdMethod 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' di GradientThresholdMethod è un metodo di ridimensionamento del gradiente basato sul valore.

Regolarizzazione L2

Aggiungere un termine di regolarizzazione per i pesi alla funzione di perdita E(θ) è 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

ER(θ)=E(θ)+λΩ(w),

dove w è il vettore di peso, λ è il fattore di regolarizzazione (coefficiente) e la funzione di regolarizzazione Ω(w) è

Ω(w)=12wTw.

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 .

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 R2016a

espandi tutto