NeuralNetWorker

14Mar10

Ciao a tutti!
Vi presento oggi il frutto di qualche giornata di lavoro dopo l’esame di fondamenti di informatica: NeuralNetWorker

Come ricorderete dai precedenti post, ho fatto all’esame di stato la tesina sulle reti neurali e ho anche approfondito l’argomento in ambito informatico dove tutt’ora le utilizzo per svariate applicazioni.

Il problema che ho incontrato lavorando sulle reti neurali in python è stato principalmente la velocità. Finito l’esame di informatica in università ho ripensato ai lavori fatti in passato in merito alle reti neurali con python e ho pensato: “ma non esiste un tool per la bash per lavorare con le reti neurali?”. Dopo una rapida ricerca su internet la risposta è stata seccamente “no”.
Ripensando però al fatto di aver appena concluso l’esame sul linguaggio C ho pensato “e se lo creassi io questo tool? in C magari?”.. Pochi istanti dopo avevo già in mente come progettare il tutto e mi sono buttato sulla tastiera a lavorare.

Dopo qualche ora di lavoro ho subito compreso quanto sia complesso gestire array multidimensionali di grandezza arbitraria in C.
Se ci pensate bene non è infatti possibile fare:

int matrice[x][y];

O meglio, in C89 non è possibile.. In C99, il “nuovo” standard di C è possibile. Gcc però non la pensa molto bene di C99 nel man:

ISO C99.  Note that this standard is not yet fully supported;

Per risolvere il problema in C89 dobbiamo quindi fare qualcosa del genere:

int *matrice;
int i;
matrice = malloc(sizeof(int)*x);

for (i=0;i<y;i++){
matrice[i] = malloc(sizeof(int)*y)};

Il tutto escludendo i vari controlli di memory leak..

Allora, in preda forse alla follia più che alla razionalità, mi sono buttato nella programmazione “matta e disperatissima”, implementando la gestione di tutti gli array multidimensionali di dimensione arbitraria, gli algoritmi di allocazione, deallocazione, controllo di memory leak, parser di parametri da riga di comando, algoritmo di retro-propagazione..

Quello che ne è  risultato è un programma parzialmente funzionante ora in sviluppo. Nonostante sia ancora pre-alpha grandissima parte del lavoro è stata fatta e mi è costata serate di pazzia..

L’idea del programma è che diventi un tool per la bash a cui basterà passare un file di esempi e parametri per una rete neurale, lui crea la rete, la addestra sugli esempi e minimizza l’errore fino a quanto desiderato. Una volta che la rete è stata salvata è possibile richiamarla per passargli dati in ingresso e ottenere gli output.
Sto tentando di implementare reti feed-forward MLP con possibilità di utilizzo di bias su strato input e intermedi.
Il supporto per più di un layer hidden non è ancora stato debuggato 😀
Ci sarà la possibilità di abilitare la variante “momentum” e modificare le funzioni di trasferimento.
Il comando da shell sarà “nnw

Il progetto l’ho pubblicato per ora su github. Se qualcuno è interessato ad aggregarsi faccia un fischio!

p.s: Se viene fuori bene tenterò di farlo includere in GNU! 😀

Advertisements


2 Responses to “NeuralNetWorker”

  1. 1 dierre

    puoi consigliare qualche lettura in merito alle reti neurali? Per un beginner ovviamente. Stavo leggendo il tuo codice ma senza basi mi riesce difficile capire cosa fanno le funzioni.

  2. Ops, mi sono dimenticato di rispondere a questo commento.. Comunque se “sei ancora lì” ti informo che in uno dei miei post precedenti ho pubblicato la tesina che ho redatto per la maturità. Puoi leggere quella come “introduzione” alle reti neurali diciamo. Se vuoi un testo piuttosto completo su tutti i tipi di reti di neurale “classici” (ma necessita una preparazione matematica abbastanza sviluppata per leggerlo) c’è il libro di Cammarata che mi pare si chiami “Reti Neuronali”; il titolo esatto lo trovi alla fine della mia tesina nella bibliografia.

    Ciao!!!


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...


%d blogger hanno fatto clic su Mi Piace per questo: