Main Content

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

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 .

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.

Vedi anche

|

Argomenti complementari