Newsgroup: it.comp.ia
Titolo: Strutture Dati per Reti Neurali

Quali sono le strutture dai usate nella programmazione meglio capaci di
rappresentare una rete neurale?
Grazie in anticipo per le risposte.
dumah

 rappresentare una rete neurale?
Una NN si presta in modo molto naturale ad essere rappresentata da classi (i
neuroni), opportunamente collegabili tra loro.
Stefano


Domanda (sperando di non dire eresie, visto che non ho molta esperienza in
materia di simulatori NN)
Per un aproccio generico, quella delle classi, mi sembra una cosa comoda...
Ma per un aproccio specifico che ha bisogno della massima efficienza... le
classi non rischiano di essere poco efficienti? cioè... non si spreca troppa
memoria / potenza di calcolo per gestire la memoria usata in eccesso
(rispetto ad un'ipotetica struttura dati/simulatore creato ad hoc per
l'occasione)
Oppure l'eventuale divario non è poi così grande?
Grazie, Max

 l'occasione)
Il caos che genereresti nel considerare strutture dati statiche per l'intera
rete e' talmente enorme che un approccio del genere e' totalmente
inapplicabile, se non nelle piu' semplici e banali strutture con pochi
neuroni.
Pensa che devi tenere per ogni neurone un vettore di input che puo' essere
collegato a ogni altro neurone (a ogni neurone dello strato precedente, se
usi un MLP), quindi devi inventarti strutture che descrivano le
interconnessioni, e a ogni passo calcolarti...
No, guarda, esula dalle mie capacita' di masochismo :)
Stefano

 descrivano le interconnessioni, e a ogni passo calcolarti...
Capisco, grassie.
Ciao, Max

> Domanda: hai mica qualche buon libro da consigliarmi sulle reti neurali?
Trovi parecchi titoli sul sito 
http://digilander.libero.it/newtech/ailab.htm
Puoi anche buttarti in rete con google, anche se la qualita' dei materiali
oscilla.
Stefano


Dipende un po' da che tipo di reti vuoi implementare, e dalla
struttura.
In generale comunque, se l'efficienza non e' fondamentale un modo molto 
pratico e' quello di implementarti classi che rappresentano neuroni e/o
le connessioni,come ti ha spiegato sopra Raistlin.
Va bene perche' (tra le altre cose) e' molto semplice aggiungere e 
togliere singoli neuroni.
Se pero' la trovi troppo lenta, un'alternativa un po' piu' complessa ma 
altrettanto elegante (secondo me) e' quella di ricorrere alle matrici.
Visto che molto spesso le reti sono costituite da strati di neuroni
collegati in serie, puoi usare un vettore per rappresentare
tutti i neuroni di uno strato e una matrice per rappresentare i pesi
tra due strati.
In questo modo, usando opportune per vettori e matrici (magari 
reperibili su internet) per calcolare l'output 'y' di uno strato
non hai che da scrivere
y = f(W*x + t);
dove W e' la matrice dei pesi, x il vettore dello strato precedente, t
il vettore delle soglie, e f la funzione di schiacciamento ( in formato
vettoriale anche lei ). La back-propagation e' poco piu' complessa, ma 
non difficile (pero' non mi arrischio a scriverla a memoria, ed e' tardi 
:D).
Se la struttura della rete e' piu' complessa dovrai fare un po' di 
attenzione ( se ad esempio hai connessioni che 'saltano' uno strato ),
pero' il gioco potrebbe valere la candela.
Marco

 neuroni), opportunamente collegabili tra loro.
conosci librerie di pubblico dominio?
-- 
Quando fu chiaro  che l'OS/2 non avrebbe avuto un  seguito, la Microsoft
fece una  scelta diversa,  sviluppando Windows come  interfaccia grafica
orientata al  mouse con MS-DOS. L'idea  fu la seguente: se  non possiamo
sbarazzarci di MS-DOS almeno cerchiamo di camuffarlo.
                          [A. S. Tanenbaum, I moderni sistemi operativi]

> conosci librerie di pubblico dominio?
Se cerchi con google ne trovi una tonnellata :P
Ste

 Se cerchi con google ne trovi una tonnellata :P
mah, io ho provato a cercare e c'è anche troppa roba. Mi sai consigliare
qualcosa per le reti neurali di tipo art?


 Grazie in anticipo per le risposte.
Ciao.
Personalmente per certi tipi di applicazioni ho sempre usato  IDE di
sviluppo con linguaggi C-like, quindi ho progettato tutto in modo da
rappresentare ogni singolo neurone come un sistema MVC-OOP.
Ogni neurone era poi connesso ad altri tramite referenze ad oggetto o
puntatori, e referenziato da una lista di liste dorsale.
Saluti
   NinjaCross