Contenuto principale

Sequenze multiple con reti neurali dinamiche

A volte i dati delle serie temporali non sono disponibili in un'unica lunga sequenza ma, piuttosto, in diverse sequenze più brevi. Quando si tratta di reti statiche e di batch simultanei di dati statici, è possibile semplicemente unire i set di dati per formare un unico grande batch simultaneo. Tuttavia, in genere non si desidera aggiungere sequenze temporali tra loro, poiché questo comporterebbe una discontinuità nella sequenza. In questi casi, è possibile creare un insieme di sequenze simultanee, come descritto in Understanding Shallow Network Data Structures.

Quando si addestra una rete con un insieme di sequenze simultanee, è necessario che ogni sequenza abbia la stessa lunghezza. In caso contrario, gli input e i target delle sequenze più corte devono essere riempiti con NaN, in modo da rendere tutte le sequenze della stessa lunghezza. I target a cui è stato assegnato il valore NaN saranno ignorati durante il calcolo delle prestazioni della rete.

Il codice seguente illustra l'utilizzo della funzione catsamples per combinare insieme diverse sequenze e formare un insieme di sequenze simultanee, riempiendo allo stesso tempo le sequenze più corte.

load magmulseq
y_mul = catsamples(y1,y2,y3,'pad');
u_mul = catsamples(u1,u2,u3,'pad');
d1 = [1:2];
d2 = [1:2];
narx_net = narxnet(d1,d2,10);
narx_net.divideFcn = '';
narx_net.trainParam.min_grad = 1e-10;
[p,Pi,Ai,t] = preparets(narx_net,u_mul,{},y_mul);
narx_net = train(narx_net,p,t,Pi);