Contenuto principale

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

trainlm

Retropropagazione di Levenberg-Marquardt

Descrizione

net.trainFcn = 'trainlm' visualizza la proprietà della rete trainFcn.

[trainedNet,tr] = train(net,...) addestra la rete con trainlm.

trainlm è una funzione di addestramento della rete che aggiorna i valori di pesi e bias secondo l'ottimizzazione di Levenberg-Marquardt.

trainlm è spesso l’algoritmo di retropropagazione più veloce nella toolbox ed è vivamente consigliato come algoritmo supervisionato di prima scelta, sebbene richieda più memoria rispetto ad altri algoritmi.

L’addestramento avviene secondo i parametri di addestramento trainlm, mostrati qui con i relativi valori predefiniti:

  • net.trainParam.epochs — Numero massimo di epoche per l’addestramento. Il valore predefinito è 1000.

  • net.trainParam.goal — Obiettivo di performance. Il valore predefinito è 0.

  • net.trainParam.max_fail — Errori di convalida massimi. Il valore predefinito è 6.

  • net.trainParam.min_grad — Gradiente di performance massimo. Il valore predefinito è 1e-7.

  • net.trainParam.mumu iniziale. Il valore predefinito è 0,001.

  • net.trainParam.mu_dec — Fattore di decremento per mu. Il valore predefinito è 0,1.

  • net.trainParam.mu_inc — Fattore di incremento per mu. Il valore predefinito è 10.

  • net.trainParam.mu_max — Valore massimo per mu. Il valore predefinito è 1e10.

  • net.trainParam.show — Epoche tra visualizzazioni (NaN per nessuna visualizzazione). Il valore predefinito è 25.

  • net.trainParam.showCommandLine — Generazione di output della riga di comando. Il valore predefinito è false.

  • net.trainParam.showWindow — Visualizzazione dell’interfaccia grafica di addestramento. Il valore predefinito è true.

  • net.trainParam.time — Tempo massimo di addestramento in secondi. Il valore predefinito è inf.

I vettori di convalida sono usati per interrompere l’addestramento in anticipo se la performance della rete sui vettori di convalida non riesce a migliorare o se resta uguale per max_fail epoche in una riga. I vettori di test sono usati come ulteriore controllo della corretta generalizzazione della rete, ma non hanno alcun effetto sull’addestramento.

esempio

Esempi

comprimi tutto

Questo esempio mostra come addestrare una rete neurale utilizzando la funzione di addestramento trainlm.

Qui viene addestrata una rete neurale per prevedere le percentuali di grasso corporeo.

[x, t] = bodyfat_dataset;
net = feedforwardnet(10, 'trainlm');
net = train(net, x, t);

Figure Neural Network Training (01-Feb-2025 09:10:32) contains an object of type uigridlayout.

y = net(x);

Argomenti di input

comprimi tutto

Rete di input, specificata come un oggetto di rete. Per creare un oggetto di rete, utilizzare ad esempio feedforwardnet o narxnet.

Argomenti di output

comprimi tutto

Rete addestrata, restituita come un oggetto network.

Record di addestramento (epoch e perf), restituito come una struttura i cui campi dipendono dalla funzione di addestramento della rete (net.NET.trainFcn). Può comprendere campi quali:

  • Funzioni e parametri di addestramento, divisione dei dati e performance

  • Indici di divisione dei dati per i set di addestramento, convalida e test

  • Maschere di divisione dei dati per i set di addestramento, convalida e test

  • Numero di epoche (num_epochs) ed epoca migliore (best_epoch).

  • Un elenco dei nomi degli stati di addestramento (states).

  • Campi per ciascun nome di stato che registrano il suo valore durante l'addestramento

  • Performance della rete migliore (best_perf, best_vperf, best_tperf)

Limitazioni

Questa funzione utilizza i calcoli jacobiani, che presuppongono che la performance sia una media o una somma degli errori quadratici. Quindi, le reti addestrate con questa funzione devono utilizzare la funzione di performance mse o sse.

Ulteriori informazioni

comprimi tutto

Algoritmi

trainlm supporta l’addestramento con i vettori di convalida e di test se la proprietà NET.divideFcn della rete è impostata su una funzione di divisione dei dati. I vettori di convalida sono usati per interrompere l’addestramento in anticipo se la performance della rete sui vettori di convalida non riesce a migliorare o se resta uguale per max_fail epoche in una riga. I vettori di test sono usati come ulteriore controllo della corretta generalizzazione della rete, ma non hanno alcun effetto sull’addestramento.

trainlm può addestrare qualsiasi rete, a condizione che le funzioni di peso, input netto e trasferimento abbiano funzioni derivate.

La retropropagazione viene utilizzata per calcolare la matrice jacobiana jX della performance perf rispetto alle variabili di pesi e bias X. Ogni variabile viene regolata secondo il metodo di Levenberg-Marquardt,

jj = jX * jX
je = jX * E
dX = -(jj+I*mu) \ je

dove E indica tutti gli errori e I indica la matrice di identità.

Il valore adattivo mu aumenta di mu_inc fino a quando la modifica sopra non produce un valore di performance ridotto. La modifica viene poi apportata alla rete e mu diminuisce di mu_dec.

L’addestramento si interrompe quando si verifica una delle condizioni seguenti:

  • Viene raggiunto il numero massimo di epochs (ripetizioni).

  • Viene superata la quantità massima di time.

  • La performance è minimizzata al goal.

  • Il gradiente di performance massimo scende al di sotto di min_grad.

  • mu supera mu_max.

  • La performance di convalida (errore di convalida) è aumentata di oltre max_fail volte dall’ultima riduzione (usando la convalida).

Cronologia versioni

Introduzione prima di R2006a