Esercitazione N°1 Il tool di Matlab Matlab mette a disposizione un utile tool per lo studio delle Reti Neurali. Nel presente corso si fa riferimento alla versione di Matlab n° 6 (Release 12). Il file della guida sul tool delle reti neurali è accessibile tramite la finestra launch-pad E’ possibile gestire le reti neurali attraverso un’interfaccia grafica che può essere richiamata con un doppio-clic sull’icona del launch-pad oppure digitando: >> nntool Nel prompt dei comandi di Matlab Appare la seguente finestra (Network/Data Manager) nella quale sono raccolte le funzioni per la costruzione e l’uso delle reti. Attraverso i pulsanti nella parte bassa si agisce sulle reti e i dati di riferimento per l’addestramento e il richiamo. Nelle finestre della parte superiore sono riassunti i dati e le reti attualmente presenti nell’workspace. Ingressi Uscite Calcolate Uscite Desiderate Scarto tra uscite calcolate e desiderate Ritardi sugli ingressi Ritardi sulla Rete Reti Neurali Premendo il pulsante New Network appare la seguente schermata, che permette di definire le caratteristiche della nuova rete neurale. Per imparare ad utilizzare il tool grafico si assuma la configurazione di default proposta dal programma. Il numero di neuroni di ingresso è pari a 2, e si deduce dal numero di righe della matrice con gli intervalli di variazione degli ingressi. La rete assume la funzione di addestramento learnlm, la funzione learngdm di adattamento, l’errore quadratico medio per il calcolo dell’errore. La rete è composta da due strati (oltre allo strato di ingresso) aventi funzione di trasferimento tangente iperbolica. Con il pulsante Create si costruisce la rete e con il pulsante View si può visualizzare. Dopo aver creato la nuova rete essa appare nell’apposita finestra del Network/Data Manager. Per modificare o visualizzare le caratteristiche della rete occorre prima selezionarla. Premendo il pulsante View appare la seguente rappresentazione grafica della rete: Assieme a tale rappresentazione compaiono anche le form per la gestione di tutte le funzioni relative alla rete: Inizializzazione, Richiamo, Addestramento, Adattamento, Definizione del valore dei pesi Per poter procedere all’addestramento della rete occorre definire gli insiemi di riferimento, che nel caso specifico sono gli ingressi del training-set e le corrispondenti uscite desiderate. Dal Network/Data Manager si preme il pulsante New Data, che fa apparire la seguente finestra: In questa si stabilisce il nome della variabile che si sta creando, i valori numerici e la sua funzione riguardo la rete, se cioè si tratta di ingressi, uscite desiderate, ritardi, uscite o errori. Come primo passo si definiscano gli ingressi. Si ricordi che il numero di righe deve essere pari al numero di neuroni dello strato di ingresso della rete. Come secondo passo si definiscano le uscite desiderate. In questo caso il numero di righe deve coincidere con il numero di neuroni dello strato di uscita. Inoltre i valori devono essere compatibili con le uscite delle funzioni di trasferimento dei neuroni nell’ultimo strato. Prima di procedere con la fase di addestramento occorre inizializzare opportunamente i pesi delle connessioni, per evitare che la rete resti intrappolata in qualche minimo locale. Dopo aver selezionato la rete dall’elenco si preme il pulsante Initialize. L’inizializzazione può essere effettuata sulla base dei valori degli ingressi o degli intervalli di variazione, fissati all’atto della creazione della nuova rete. Premendo il pulsante Initialize Weights si effettua l’inizializzazione della rete. A questo punto si può procedere con la fase di addestramento. A questo scopo si passa alla form Train di questa stessa finestra. In questa form si fissano tutte le informazioni necessarie per addestrare la rete. In particolare si distinguono le informazioni riguardanti i dati in ingresso e in uscita, dai parametri di apprendimento. Tra i vari parametri, per i quali si assumono i valori di default, si richiama l’attenzione sul numero massimo di epoche (epochs), l’errore sulle uscite desiderate che si pone come obiettivo (goal) e il numero di epoche comprese tra due aggiornamenti successivi della schermata (show). Gli altri parametri riguardano la strategia di apprendimento, che verrà trattata compiutamente in esercitazioni specifiche. A questo punto si può avviare l’addestramento della rete con il pulsante Train Newtwork. Sullo schermo apparirà l’andamento dell’errore in funzione del numero di epoche. Se si pone come obiettivo un errore nullo l’addestramento procederà per il numero di epoche che si è fissato come limite. Nell’esempio in figura, nelle 100 epoche prefissate si è raggiunto un valore dell’errore dell’ordine di 10-12. La rete così addestrata può essere memorizzata nel disco, oppure trasferita all’workspace di Matlab, per ulteriori operazioni. Partendo dal Network/Data Manager si prema il pulsante Export. Apparirà l’elenco di tutte le variabili create durante le precedenti operazioni: la rete neurale, i dati in ingresso, le uscite desiderate, le uscite calcolate e gli errori commessi, cioè la differenza tra le uscite calcolate e quelle desiderate. Selezionando una variabile, per esempio la rete network1 si attivano i due pulsanti Export e Save. Il primo trasferisce la variabile selezionata all’workspace di Matlab, il secondo la salva su disco. Si prema Export. Ora la rete network1 si trova su Matlab, come possiamo vedere digitando il comando: >>whos che fornisce l’elenco di tutte le variabile presenti. Apparirà la seguente schermata: Name Size ans 1x1 network1 1x1 Bytes Class 8 double array 27926 network object Grand total is 971 elements using 27934 bytes >> La variabile network1 viene allocata come oggetto di tipo rete. Per visualizzarne la struttura digitare il nome della rete nel prompt dei comandi: >>network1 e premere invio. Apparirà la schermata visualizzata nella pagina seguente. Per accedere ai singoli campi dell’oggetto rete si utilizza la solita sintassi della programmazione a oggetti. network1 = inputWeights: {2x1 cell} containing 1 input weight layerWeights: {2x2 cell} containing 1 layer weight Neural Network object: functions: architecture: adaptFcn: 'trains' numInputs: 1 numLayers: 2 biasConnect: [1; 1] initFcn: 'initlay' performFcn: 'mse' trainFcn: 'trainlm' inputConnect: [1; 0] layerConnect: [0 0; 1 0] parameters: outputConnect: [0 1] targetConnect: [0 1] adaptParam: .passes initParam: (none) numOutputs: 1 (read-only) numTargets: 1 (read-only) performParam: (none) trainParam: .epochs, .goal, .max_fail, .mem_reduc, .min_grad, .mu, .mu_dec, .mu_inc, numInputDelays: 0 (read-only) .mu_max, .show, .time numLayerDelays: 0 (read-only) subobject structures: weight and bias values: IW: {2x1 cell} containing 1 input weight matrix inputs: {1x1 cell} of inputs LW: {2x2 cell} containing 1 layer weight matrix layers: {2x1 cell} of layers b: {2x1 cell} containing 2 bias vectors outputs: {1x2 cell} containing 1 output targets: {1x2 cell} containing 1 target biases: {2x1 cell} containing 2 biases ……….. other: userdata: (user stuff)