Main Content

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

Previsione di serie temporali e modellazione con reti neurali superficiali

Le reti neurali dinamiche sono efficaci nella previsione delle serie temporali. Per alcuni esempi dell’uso di reti NARX applicate alla previsione multifase con formato Open-Loop, Closed-Loop e Open/Closed-Loop, vedere Multistep Neural Network Prediction.

Suggerimento

Per il Deep Learning con i dati di serie temporali, vedere invece Classificazione di sequenze utilizzando il Deep Learning.

Supponiamo, ad esempio, di avere i dati di un processo di neutralizzazione del pH. Vuoi progettare una rete in grado di prevedere il pH di una soluzione in un serbatoio a partire da valori pregressi di pH e da valori pregressi della portata di acido e di base in entrata nel serbatoio. Hai un totale di 2001 fasi temporali per cui disponi di quelle serie.

Esistono due modi per risolvere questo problema:

Nota

Per costruire, visualizzare e addestrare in modo interattivo le reti neurali di Deep Learning, utilizzare l’applicazione Deep Network Designer. Per ulteriori informazioni, vedere Come iniziare a utilizzare Deep Network Designer.

Generalmente è meglio iniziare con l’app e quindi utilizzarla per generare automaticamente gli script della riga di comando. Prima di utilizzare uno dei metodi, definisci il problema selezionando un set di dati. Ciascuna delle app per reti neurali ha accesso a vari set di dati campione che si possono utilizzare per sperimentare con il toolbox (vedere Set di dati campione per reti neurali superficiali). Se è presente un problema specifico da risolvere, è possibile caricare i propri dati nel workspace.

Reti per serie temporali

È possibile addestrare una rete neurale per risolvere tre tipi di problemi con le serie temporali.

Rete NARX

Nel primo tipo di problema con le serie temporali, vogliamo prevedere i valori futuri di una serie temporale y (t) a partire da valori pregressi di quella serie temporali e da valori pregressi di una seconda serie temporale x (t). Questa forma di previsione è detta autoregressiva non lineare con input esogeno (esterno), o NARX (vedere Design Time Series NARX Feedback Neural Networks) e può essere scritta nel seguente modo:

y(t) = f(y(t – 1), ..., y(td), x(t – 1), ..., (td))

Utilizza questo modello per prevedere i valori futuri di un’azione o di un’obbligazione sulla base di variabili economiche quali tassi di disoccupazione, PIL, ecc. È possibile utilizzare questo modello anche per l’identificazione di sistemi, in cui si sviluppano modelli per rappresentare sistemi dinamici, come processi chimici, sistemi manifatturieri, robotica, veicoli aerospaziali, ecc.

Rete NAR

Nel secondo tipo di problema con le serie temporali, c’è una sola serie coinvolta. I valori futuri di una serie temporale y (t) vengono previsti solo sulla base di valori pregressi della stessa serie. Questa forma di previsione è detta autoregressiva non lineare, o NAR, e può essere scritta nel seguente modo:

y(t) = f(y(t – 1), ..., y(td))

Si può utilizzare questo modello per prevedere strumenti finanziari, ma senza l’uso di una serie di confronto.

Rete Input-Output non lineare

Il terzo problema con le serie temporali è simile al primo tipo in quanto sono coinvolte due serie, una serie di input x (t) e una serie di output y (t). In questo caso vogliamo prevedere i valori di y (t) sulla base dei valori pregressi di x (t) ma senza conoscere i valori pregressi di y (t). Questo modello Input/Output può essere scritto nel seguente modo:

y(t) = f(x(t – 1), ..., x(td))

Il modello NARX offre previsioni migliori rispetto a questo modello Input/Output, perché sfrutta le informazioni aggiuntive contenute nei valori pregressi di y (t). Tuttavia, possono esserci alcune applicazioni in cui i valori pregressi di y (t) non sarebbero disponibili. Questi sono gli unici casi in cui è meglio utilizzare il modello Input/Output che il modello NARX.

Definizione di un problema

Per definire un problema di serie temporale per il toolbox, disponi un insieme di vettori di previsione della serie temporale come colonne in un array di celle. Quindi, disponi un altro insieme di vettori di risposta della serie temporale (i vettori di risposta corretta per ciascuno dei vettori di previsione) in un secondo array di celle. Inoltre, ci sono dei casi in cui è necessario solo un set di dati di risposta. Ad esempio, si può definire il seguente problema di serie temporale, in cui si desidera utilizzare i valori pregressi di una serie per prevedere il prossimo valore:

responses = {1 2 3 4 5};

La prossima sezione mostra come addestrare una rete al fitting di un set di dati di serie temporali utilizzando l’app Neural Net Time Series. Questo esempio si basa su dati esemplificativi forniti in dotazione al toolbox.

Fitting dei dati di serie temporali con l’app Neural Net Time Series

Questo esempio mostra come addestrare una rete neurale superficiale per eseguire il data fitting di serie temporali con l’app Neural Net Time Series.

Apri l’app Neural Net Time Series tramite ntstool.

ntstool

Selezione della rete

È possibile utilizzare l’app Neural Net Time Series per risolvere tre tipi di problemi con le serie temporali.

  • Nel primo tipo di problema con le serie temporali, vogliamo prevedere i valori futuri di una serie temporale y(t) a partire da valori pregressi di quella serie temporali e da valori pregressi di una seconda serie temporale x(t). Questa forma di previsione è detta rete autoregressiva non lineare con input esogeno (esterno), o NARX.

  • Nel secondo tipo di problema con le serie temporali, c’è una sola serie coinvolta. I valori futuri di una serie temporale y(t) vengono previsti solo sulla base di valori pregressi della stessa serie. Questa forma di previsione è detta autoregressiva non lineare, o NAR.

  • Il terzo problema con le serie temporali è simile al primo tipo in quanto sono coinvolte due serie, una serie di input (predittori) x(t)) e una serie di output (risposte) y(t). In questo caso vogliamo prevedere i valori di y(t) sulla base dei valori pregressi di x(t) ma senza conoscere i valori pregressi di y(t).

Per questo esempio, utilizza una rete NARX. Fai clic su Select Network > NARX Network (Selezionare rete > Rete NARX).

Selezione dei dati

L’app Neural Net Time Series contiene dei dati esemplificativi che ti aiuteranno ad iniziare ad addestrare una rete neurale.

Per importare i dati esemplificativi per il processo di neutralizzazione del pH, seleziona Import > More Example Data Sets > Import pH Neutralization Data Set (Importare > Altri set di dati esemplificativi > Importare dati di neutralizzazione pH). È possibile utilizzare questo set di dati per addestrare una rete neurale a prevedere il pH di una soluzione utilizzando il flusso di soluzione acida e basica. Se si importano dati propri da un file o da workspace, occorre specificare i predittori e le risposte.

Le informazioni sui dati importati compaiono nel Model Summary (Riepilogo modello). Questo set di dati contiene 2001 fasi temporali. I previsori hanno due feature (flusso di soluzione acida e basica) e le risposte hanno una sola feature (pH della soluzione).

Suddividi i dati in set di addestramento, convalida e prova. Mantieni le impostazioni predefinite. I dati si suddividono in:

  • 70% per l’addestramento.

  • 15% per convalidare che la rete stia generalizzando e per interrompere l’addestramento prima di un overfitting.

  • 15% per testare in maniera indipendente la generalizzazione della rete.

Per ulteriori informazioni sulla suddivisione dei dati, vedere Divide Data for Optimal Neural Network Training.

Creazione della rete

La rete NARX standard è una rete feed-forward a due livelli con funzione di trasferimento sigmoidale nel livello nascosto e una funzione di trasferimento lineare nel livello di output. Questa rete sfrutta anche delle tapped delay line per archiviare i valori pregressi delle sequenze x(t) e y(t). Nota che l’output della rete NARX, y(t), viene retroalimentato all’input della rete (attraverso dei ritardi), dato che y(t) è una funzione di y(t1),y(t2),...,y(td). Tuttavia, per un addestramento efficiente è necessario che questo loop di feedback sia aperto.

Dato che l’output vero è disponibile durante l’addestramento della rete, è possibile utilizzare l’architettura Open-loop illustrata di seguito, in cui l’output vero è utilizzato in sostituzione del feedback all’output stimato. Questo presenta due vantaggi. Il primo è che l’input della rete feed-forward è più accurato. Il secondo è che la rete che si ottiene ha un’architettura puramente feed-forward, e pertanto è possibile utilizzare un algoritmo più efficiente per l’addestramento. Questa rete è trattata più dettagliatamente in Design Time Series NARX Feedback Neural Networks.

Il valore delle Layer size (Dimensioni del livello) definisce il numero di neuroni nascosti. Mantieni le dimensioni di livello predefinite, 10. Modifica il valore del Time delay (Ritardo temporale) in 4. È opportuno regolare questi numeri se la performance dell’addestramento della rete è insoddisfacente.

È possibile vedere l’architettura di rete nel pannello Network.

Addestramento della rete

Per addestrare la rete, seleziona Train > Train with Levenberg-Marquardt (Addestrare > Addestrare con Levenberg-Marquardt). Questo è l’algoritmo di addestramento predefinito ed equivale alla pressione del tasto Train (Addestrare).

L’addestramento con il metodo di Levenberg-Marquardt (trainlm) è consigliato per la maggior parte dei problemi. Per problemi piccoli o in presenza di rumore, la regolarizzazione bayesiana (trainbr) può ottenere una soluzione migliore, anche se richiede tempi maggiori. Per problemi più grandi si consiglia l’impostazione Gradiente coniugato scalato (trainscg) in quanto utilizza i calcoli dei gradienti che sono più efficienti sotto il profilo della memoria rispetto ai calcoli jacobiani utilizzati dagli altri due algoritmi.

Nel pannello Training (Addestramento) si possono vedere i progressi dell’addestramento. L’addestramento continua fino al raggiungimento di uno dei criteri di arresto. In questo esempio, l’addestramento continua fino a quando l’errore di convalida aumenta per sei iterazioni consecutive (“Criterio di convalida soddisfatto”).

Analisi dei risultati

Il Model Summary (Riepilogo modello) contiene informazioni sull’algoritmo di addestramento e i risultati dell’addestramento per ogni set di dati.

È possibile analizzare ulteriormente i risultati generando dei grafici. Per tracciare l’autocorrelazione degli errori, nella sezione Plots (Grafici), fai clic su Error Autocorrelation (Autocorrelazione errori). Il grafico dell’autocorrelazione descrive il modo in cui gli errori di previsione sono correlati nel tempo. Per un modello previsionale perfetto deve esserci un solo valore diverso da zero nella funzione di autocorrelazione e deve verificarsi sul lag zero (si tratta dell’errore quadratico medio). Questo significherebbe che gli errori di previsione non avevano alcuna correlazione tra loro (rumore bianco). Se è presente una correlazione significativa tra gli errori di previsione, dovrebbe essere possibile migliorare la previsione, forse aumentando il numero di ritardo nelle tapped delay line. In questo caso le correlazioni, tranne quella sul lag zero, rientrano approssimativamente nei limiti dell’intervallo di confidenza del 95% intorno a zero, pertanto il modello sembra essere adeguato. Nel caso in cui siano richiesti risultati ancora più accurati, si potrebbe riaddestrare la rete. Il riaddestramento comporta una modifica dei pesi e bias iniziali della rete e potrebbe produrre una rete migliorata.

Visualizza il grafico della correlazione incrociata tra input ed errori per una ulteriore verifica della performance della rete. Nella sezione Plots (Grafici), fai clic su Input-Error Correlation (Correlazione input-errori). Il grafico della correlazione incrociata tra input ed errori mostra il modo in cui gli errori sono correlati alla sequenza di input x(t). Per un modello previsionale perfetto, tutte le correlazioni dovrebbero essere zero. Se l’input è correlato all’errore, dovrebbe essere possibile migliorare la previsione, forse aumentando il numero di ritardo nelle tapped delay line. In questo caso, la maggior parte delle correlazioni ricade entro l’intervallo di confidenza intorno a zero.

Nella sezione Plots (Grafici), fai clic su Response (Risposta). Questa sezione mostra gli output, le risposte (target) e gli errori in relazione al tempo. Inoltre, indica quali punti temporali sono stati selezionati per l’addestramento, il test e la convalida.

Se non si è soddisfatti delle prestazioni della rete, si può procedere in uno dei seguenti modi:

  • Addestrare nuovamente la rete.

  • Aumentare il numero di neuroni nascosti.

  • Usare un set più ampio di dati di addestramento.

Se la performance sul set di addestramento è buona ma la performance sul set di test è scarsa, questo può indicare un overfitting del modello. Ridurre le dimensioni del livello, e di conseguenza ridurre il numero di neuroni, può ridurre l’overfitting.

Si può anche valutare la performance della rete su un ulteriore set di test. Per caricare ulteriori dati di test con cui valutare la rete, nella sezione Test, fai clic su Test. Il Model Summary (Riepilogo modello) mostra i risultati dei dati di test aggiuntivi. È possibile generare anche dei grafici per analizzare i risultati dei dati di test aggiuntivi.

Generazione di codice

Seleziona Generate Code > Generate Simple Training Script (Generare codice > Generare script di addestramento semplice) per creare un codice MATLAB in grado di riprodurre le fasi precedenti dalla riga di comando. La creazione di codice MATLAB può essere utile se si desidera imparare come utilizzare la funzionalità della riga di comando del toolbox per personalizzare il processo di addestramento. In Fitting dei dati di serie temporali con le funzioni della riga di comando, potrai esaminare più dettagliatamente gli script generati.

Esportazione della rete

Una volta addestrata, la rete può essere esportata nel workspace o in Simulink®. È anche possibile distribuire la rete con gli strumenti di MATLAB Compiler™ e altri strumenti di generazione di codice MATLAB. Per esportare la rete addestrata e i risultati, seleziona Export Model > Esport to Workspace (Esportare modello > Esportare in Workspace).

Fitting dei dati di serie temporali con le funzioni della riga di comando

Il modo più semplice per scoprire come utilizzare la funzionalità della riga di comando del toolbox consiste nel generare degli script dalle app e poi modificarli per personalizzare l’addestramento della rete. Per un esempio, osservare il semplice script generato nella sezione precedente utilizzando l’app Neural Net Time Series.

% Solve an Autoregression Problem with External Input with a NARX Neural Network
% Script generated by Neural Time Series app
% Created 13-May-2021 17:34:27
%
% This script assumes these variables are defined:
%
%   phInputs - input time series.
%   phTargets - feedback time series.

X = phInputs;
T = phTargets;

% Choose a Training Function
% For a list of all training functions type: help nntrain
% 'trainlm' is usually fastest.
% 'trainbr' takes longer but may be better for challenging problems.
% 'trainscg' uses less memory. Suitable in low memory situations.
trainFcn = 'trainlm';  % Levenberg-Marquardt backpropagation.

% Create a Nonlinear Autoregressive Network with External Input
inputDelays = 1:4;
feedbackDelays = 1:4;
hiddenLayerSize = 10;
net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn);

% Prepare the Data for Training and Simulation
% The function PREPARETS prepares timeseries data for a particular network,
% shifting time by the minimum amount to fill input states and layer
% states. Using PREPARETS allows you to keep your original time series data
% unchanged, while easily customizing it for networks with differing
% numbers of delays, with open loop or closed loop feedback modes.
[x,xi,ai,t] = preparets(net,X,{},T);

% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

% Train the Network
[net,tr] = train(net,x,t,xi,ai);

% Test the Network
y = net(x,xi,ai);
e = gsubtract(t,y);
performance = perform(net,t,y)

% View the Network
view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, ploterrhist(e)
%figure, plotregression(t,y)
%figure, plotresponse(t,y)
%figure, ploterrcorr(e)
%figure, plotinerrcorr(x,e)

% Closed Loop Network
% Use this network to do multi-step prediction.
% The function CLOSELOOP replaces the feedback input with a direct
% connection from the output layer.
netc = closeloop(net);
netc.name = [net.name ' - Closed Loop'];
view(netc)
[xc,xic,aic,tc] = preparets(netc,X,{},T);
yc = netc(xc,xic,aic);
closedLoopPerformance = perform(net,tc,yc)

% Step-Ahead Prediction Network
% For some applications it helps to get the prediction a timestep early.
% The original network returns predicted y(t+1) at the same time it is
% given y(t+1). For some applications such as decision making, it would
% help to have predicted y(t+1) once y(t) is available, but before the
% actual y(t+1) occurs. The network can be made to return its output a
% timestep early by removing one delay so that its minimal tap delay is now
% 0 instead of 1. The new network returns the same outputs as the original
% network, but outputs are shifted left one timestep.
nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(nets)
[xs,xis,ais,ts] = preparets(nets,X,{},T);
ys = nets(xs,xis,ais);
stepAheadPerformance = perform(nets,ts,ys)

È possibile salvare lo script ed eseguirlo successivamente dalla riga di comando per riprodurre i risultati della precedente sessione con l’app. Si può anche modificare lo script per personalizzare il processo di addestramento. In questo caso, segui ciascuno dei passaggi all’interno dello script.

Selezione dei dati

Lo script presuppone che i vettori di previsione e di risposta siano già caricati nel workspace. Se i dati non sono caricati, li si può caricare nel seguente modo:

load ph_dataset
Questo comando carica i predittori pHInputs e le risposte pHTargets nel workspace.

Questo set di dati è uno dei set di dati campione inclusi nel toolbox. Per informazioni sui set di dati disponibili, vedere Set di dati campione per reti neurali superficiali. Inoltre, è possibile vedere un elenco di tutti i set di dati disponibili immettendo il comando help nndatasets. È possibile caricare le variabili da uno qualunque di questi set di dati utilizzando i propri nomi di variabile. Ad esempio, il comando

[X,T] = ph_dataset;
caricherà i predittori per il set di dati del pH nell’array X e le risposte per il set di dati del pH nell’array T.

Scelta dell’algoritmo di addestramento

Definisci l’algoritmo di addestramento. La rete utilizza l’algoritmo di Levenberg-Marquardt predefinito (trainlm) per l’addestramento.

trainFcn = 'trainlm';  % Levenberg-Marquardt backpropagation.

Per problemi in cui il metodo di Levenberg-Marquardt non produce risultati sufficientemente accurati, o per problemi di dati più grandi, considerare di impostare la funzione di addestramento della rete rispettivamente su Regolarizzazione bayesiana (trainbr) o su Gradiente coniugato scalato (trainscg), con

net.trainFcn = 'trainbr';
net.trainFcn = 'trainscg';

Creazione della rete

Crea una rete. La rete NARX, narxnet, è una rete feed-forward con la funzione di trasferimento tan-sigmoidale predefinita nel livello nascosto e una funzione di trasferimento lineare nel livello di output. Questa rete ha due output. Uno è un output esterno, mentre l’altro è un collegamento di feedback dall’output della rete. Una volta addestrata la rete, questo collegamento di feedback può essere chiuso, come vedrai in una fase successiva. Per ciascuno di questi input è presente una tapped delay line per archiviare i valori pregressi. Per assegnare l’architettura di rete ad una rete NARX, è necessario selezionare i ritardi associati ad ogni tapped delay line, come pure il numero di neuroni nel livello nascosto. Nelle prossime fasi assegnerai i ritardi di input e i ritardi di feedback in un intervallo da 1 a 4, mentre il numero di neuroni nascosti deve essere 10.

inputDelays = 1:4;
feedbackDelays = 1:4;
hiddenLayerSize = 10;
net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn);

Nota

Aumentare il numero di neuroni e il numero di ritardi richiede più calcolo e comporta una tendenza all’overfitting dei dati quando i numeri sono impostati su valori troppo alti, ma consente alla rete di risolvere problemi più complicati. Più livelli richiedono più calcolo, ma il loro utilizzo potrebbe consentire alla rete di risolvere problemi più complessi in modo più efficiente. Per utilizzare più di un livello nascosto, inserisci le dimensioni dei livelli nascosti come elementi di un array nel comando narxnet.

Preparazione dei dati per l’addestramento

Prepara i dati per l’addestramento. Per l’addestramento di una rete contenente delle tapped delay line, è necessario riempire i ritardi con i valori iniziali dei predittori e delle risposte della rete. C’è un comando del toolbox che facilita questo processo: preparets. Questa funzione ha tre argomenti di input: la rete, i predittori e le risposte. La funzione ripristina le condizioni iniziali, che sono necessarie per riempire le tapped delay line della rete e le sequenze di predittori e risposte modificate, in cui le condizioni iniziali sono state rimosse. È possibile chiamare la funzione nel seguente modo:

[x,xi,ai,t] = preparets(net,X,{},T);

Suddivisione dei dati

Imposta la suddivisione dei dati.

net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

Con queste impostazioni, i dati vengono suddivisi su base casuale, con il 70% per l’addestramento, il 15% per la convalida e il 15% per le attività di test.

Addestramento della rete

Addestra la rete.

[net,tr] = train(net,x,t,xi,ai);

Durante l’addestramento si apre la seguente finestra di addestramento. Questa finestra mostra l’avanzamento dell’addestramento e permette di interrompere l’addestramento in qualunque momento facendo clic sul pulsante di stop .

Neural network training progress window

Questo addestramento si è interrotto quando l’errore di convalida è aumentato per sei iterazioni consecutive.

Test della rete

Esegui il test della rete. Una volta addestrata la rete è possibile utilizzarla per calcolare gli output della rete. Il seguente codice calcola gli output, gli errori e la performance complessiva della rete. Nota che, per simulare una rete con tapped delay line, è necessario assegnare i valori iniziali per i segnali ritardati. Questa procedura si esegue con gli stati degli input (xi) e gli stati dei livelli (ai) forniti da preparets in una fase precedente.

y = net(x,xi,ai);
e = gsubtract(t,y);
performance = perform(net,t,y)
performance =

    0.0042

Visualizzazione della rete

Visualizza il diagramma della rete.

view(net)

Graphical representation of the NARX network. The network has two inputs of size 2 and 1, a time delay of 1:4, a hidden layer of size 10, and output size 1.

Analisi dei risultati

Traccia il registro dell’addestramento della performance per verificare l’eventuale presenza di overfitting.

figure, plotperform(tr)

Mean squared error against number of epochs for the training, validation, and test data. The best validation performance is 0.009712 at epoch 34.

In questa figura si osserva che gli errori di addestramento e di convalida diminuiscono fino all’epoca evidenziata. Non sembra che si sia verificato nessun tipo di overfitting, perché l’errore di convalida non aumenta prima di questa epoca.

Tutto l’addestramento viene eseguito in open loop (questa struttura viene anche denominata architettura in serie parallela), comprese le fasi di convalida e di test. Il tipico workflow prevede la creazione della rete in open loop e solo una volta che è stata addestrata (comprese le fasi di convalida e di test) la rete viene trasformata in closed loop per la previsione multistep-ahead. Analogamente, i valori R nell’app Neural Net Times Series sono calcolati sulla base dei risultati dell’addestramento open-loop.

Rete Closed-Loop

Chiudi il loop nella rete NARX. Quando il loop di feedback è aperto nella rete NARX, la rete sta eseguendo una previsione one-step ahead. Sta prevedendo il prossimo valore di y (t) a partire dai valori pregressi di y (t) e di x (t). Quando il loop di feedback è chiuso, la rete può essere utilizzata per previsioni multi-step ahead. Questo perché le previsioni di y (t) saranno utilizzate al posto dei valori futuri effettivi di y (t). I seguenti comandi possono essere utilizzati per chiudere il loop e calcolare la performance closed-loop

netc = closeloop(net);
netc.name = [net.name ' - Closed Loop'];
view(netc)
[xc,xic,aic,tc] = preparets(netc,X,{},T);
yc = netc(xc,xic,aic);
closedLoopPerformance = perform(net,tc,yc)
closedLoopPerformance =

    0.4014

Graphical representation of the NARX network with a closed loop. The outputs are fed back into the network as inputs.

Rete di previsione step-ahead

Rimuovi un ritardo dalla rete per ottenere la previsione una fase temporale prima.

nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(nets)
[xs,xis,ais,ts] = preparets(nets,X,{},T);
ys = nets(xs,xis,ais);
stepAheadPerformance = perform(nets,ts,ys)
stepAheadPerformance =

    0.0042

Graphical representation of the NARX network. The network has two inputs of size 2 and 1, a time delay of 0:3, a hidden layer of size 10, and output size 1.

Da questa figura si può vedere che la rete è identica alla rete Open-Loop precedente, tranne per il fatto che è stato eliminato un ritardo da ciascuna delle tapped delay line. L’output della rete è dunque y (t +1) anziché y (t). Questa operazione può risultare utile quando una rete viene distribuita per certe applicazioni.

Fasi successive

Se la performance della rete non è soddisfacente, si potrebbe tentare uno dei seguenti approcci:

  • Reimpostare i pesi e i bias iniziali della rete su nuovi valori con init e ripetere l’addestramento.

  • Aumentare il numero di neuroni nascosti o il numero di ritardi.

  • Usare un set più ampio di dati di addestramento.

  • Aumentare il numero di valori di input, se sono disponibili informazioni più pertinenti.

  • Provare un algoritmo di addestramento diverso (vedere Training Algorithms).

Per acquisire maggiore esperienza nelle operazioni legate alla riga di comando, prova alcune delle seguenti attività:

  • Durante l’addestramento, apri una finestra con un grafico (ad esempio il grafico di correlazione degli errori) e osserva come si anima.

  • Crea dei grafici dalla riga di comando con funzioni come plotresponse, ploterrcorr e plotperform.

Ogni volta che una rete neurale viene addestrata può arrivare a una soluzione diversa a causa dei valori casuali dei pesi e dei bias iniziali e delle diverse suddivisioni dei dati tra set di addestramento, convalida e test. Di conseguenza, diverse reti neurali addestrate sullo stesso problema possono avere output diversi per lo stesso input. Per assicurarsi di riscontrare una precisione soddisfacente nella rete, occorre ripetere l’addestramento varie volte.

Esistono varie altre tecniche per migliorare le soluzioni iniziali qualora si desideri una precisione maggiore. Per ulteriori informazioni, vedere Improve Shallow Neural Network Generalization and Avoid Overfitting.

Vedi anche

| | | | | | | | |

Argomenti complementari