Home > Doc > Reti Neurali su .... >Realizzazione Software

Reti neurali su Personal Computer e Fuzzy Logic: Reti Neurali Autoorganizzanti

Realizzazione Software

Non è particolarmente difficile la realizzazione di una rete autoorganizzante "giocattolo". Bisogna utilizzare due vettori di m e n float per input e output e un vettore di n*m float per i pesi tra input e output. All’ inizio i pesi devono essere inizializzati in modo random con valori compresi tra 0 e 1.

Una funzione di apprendimento learn() deve leggere, da un file contenente il training set, un pattern e inserirlo normalizzato nel vettore input. Poi deve chiamare una funzione di esecuzione della rete exec() che calcola l'output per ogni neurone effettuando una moltiplicazione dei vettori input con i vettori pesi. Una altra funzione effettuerà uno scanning dei valori di attivazione dei neurodi dello strato output scegliendo il maggiore e passerà alla funzione learn() il numero identificativo(indice del vettore) del neurodo vincente.

A questo punto la funzione learn() può applicare la regola di aggiornamento dei pesi su quel neurodo. Questa operazione completa il ciclo su un pattern e il passo successivo è la lettura di un altro pattern. Tutti i pattern del training set devono essere appresi in questo modo dalla rete per un numero consistente di iterazioni. Normalmente il collegamento a cappello messicano dei pesi sullo strato Kohonen viene trascurato anche perché dovrebbe essere dimensionato in modo opportuno a seconda del problema.

Più importante può risultare l'aggiornamento dei pesi dei neurodi vicini al neurodo vincente, tuttavia le variazioni che si possono attuare su questo modello sono molteplici e consentono di avere risultati migliori per specifici problemi: ad esempio epsilon decrescente e vicinato del neurone vincente decrescente sono accorgimenti che possono favorire la convergenza della rete. Nel listato 1 sono rappresentate in metalinguaggio le funzioni principali semplificate di una simulazione di rete neurale Kohonen autoorganizzante.

LISTATO 1


LEARN:
FOR1 K=1 TO NUMERO ITERAZIONI
FOR2 J=1 TO NUMERO PATTERNS
LETTURA PATTERN(J)
EXEC
SCANNING_OUTPUT-->NEURODO WINNER
UPDATE_WEIGHTS(NEURODO_WINNER)
NORMALIZZ_WEIGHTS (NON INDISPENSABILE)
ENDFOR2
ENDFOR1
EXEC:
FOR1 J=1 TO NUMERO NEURODI MATRICE OUTPUT
FOR2 K=1 TO DIMENSIONE INPUT PATTERN
ATTIV_NEURODO(J)=ATTIV_NEURODO(J)+W(J,K)*X(K)
ENDFOR2
ENDFOR1
SCANNING_OUTPUT:
ATT_MAX=0
FOR J=1 TO NUMERO NEURODI MATRICE OUTPUT
IF (ATTIV_NEURODO(J)>ATT_MAX)
ATT_MAX=ATTIV_NEURODO(J)
NEURODO_WINNER=J
ENDIF
ENDFOR
UPDATE_WEIGHTS(J):
FOR K=1 TO DIMENSIONE PATTERN
W(J,K)NEW=W(J,K)OLD+EPSILON*(X(K)-W(J,K)OLD)
ENDFOR

Luca Marchese

Successivo: Conclusioni

Sommario: Indice