per Windows


Neuro10b.zip

Neuro.dll
E' in arrivo la versione 1.1 del programma! Stay tuned!!!

Lo ammetto, il nome non è molto bello... si tratta comunque di una libreria, ancora in fase sperimentale, che ho scritto per avere sempre a portata di mano una rete neurale comoda e veloce da configurare ed usare per i miei programmi.
La libreria implementa una rete neurale di tipo Multi Level Perceptron (MLP), e mette a disposizione poche e semplici funzioni di interfaccia per creare, personalizzare, addestrare e utilizzare (in avanti) la rete. Sono presenti anche due utili funzioni per il salvataggio e il caricamento della rete da file.
E' possibile utilizzare la libreria con qualsiasi linguaggio che permetta di accedere a file di libreria (.dll) esterni (quindi C/C++, Visual Basic, Delphi...) in maniera estremamente semplice. Le funzioni di interfaccia hanno un livello di astrazione abbastanza alto e quindi permettono anche a chi non conoscesse bene la teoria delle reti neurali di usare la libreria. Anche per questo motivo molti degli aspetti più tecnici che riguardano la rete sono volutamente "nascosti" e/o inaccessibili. Le rete è vista come una "scatola nera" con soltanto degli ingressi e delle uscite accessibili.

Essendo un programma ancora piuttosto sperimentale ho tralasciato alcuni aspetti "minori" che sarebbero d'obbligo in un programma più completo e definitivo (ad esempio le funzioni di allocazione o di I/O non restituiscono il classico valore che indica l'esito dell'operazione). Inoltre per mantenere la compatibilità con il Visual Basic ho dovuto fare alcune scelte un pò stravaganti... (i programmatori più esperti li noteranno sicuramente).

 

Funzioni esportate dalla libreria

La libreria utilizza per rappresentare la rete una struttura dati (NET) di cui è accessibile all'esterno soltanto il puntatore, che viene utilizzato come una specie di "handle". Questo rende possibile anche la creazione di più reti, e quindi la creazione di una rete formata da più reti che hanno compiti gerarchicamente diversi!
Il puntatore viene restituito dalla funzione che crea la rete e deve essere conservato ed utilizzato nella chiamata delle altre funzioni.
Le funzioni d'interfaccia disponibili sono:

NET* GenerateNetwork(INTG n, INTG* upl, REAL alpha, REAL eta, REAL gain);
void InitializeRandoms(INTG s);
void RandomWeights(NET* Net);
void SetInput(NET* Net, REAL* Input);
void GetOutput(NET* Net, REAL* Output);
REAL GetError(NET* Net);
void SetParam(NET* Net, REAL alpha, REAL eta, REAL gain);
void SaveNet(NET* Net, char* FileName);
NET* LoadNet(char* FileName);
void SimulateNet(NET* Net, REAL* Input, REAL* Output, REAL* Target, INTG Training);
void Informations();

Ecco le equivalenze dei i diversi tipi tra diversi linguaggi:

Tipo

Equivalente C

Equivalente VB

Lunghezza

INTG

short int

Integer

2 byte

REAL

float

Single

4 byte

NET*

long

Long

4 byte

 

 

Descrizione dettagliata delle funzioni d'interfaccia:

 

NET* GenerateNetwork(INTG n, INTG* upl, REAL alpha, REAL eta, REAL gain);

Serve per creare fisicamente la rete. I parametri sono:
n: numero di strati (layer) nella rete, incluso il layer di ingresso. Ad esempio 3 significa: ingresso, strato nascosto, uscita.
upl: è un array di n elementi che contiene il numero di neuroni in ciuscuno strato (partendo dall'ingresso).
alpha: è il coefficiente di "momentum" della rete, può essere 0 se non si vuole utilizzare.
eta: è la velocità di apprendimento (learning rate) della rete.
gain: è il coefficiente di guadagno della funzione sigmoide (coeff. ad esponente), regola la piattezza della risposta.
Restituisce: puntatore alla rete appena creata.

 

void InitializeRandoms(INTG s);

Setta il seme dei generatori di numeri casuali. il parametro s è il nuovo seme.

 

void RandomWeights(NET* Net);

Inizializza i pesi di tutti i collegamenti della rete, in un range compreso tra -0.5 e 0.5. In pratica resetta la rete (!!!).
Net: puntatore alla rete.

 

void SetInput(NET* Net, REAL* Input);

Carica nella rete gli input... Credo che non serva quasi a niente... (!)
Net: puntatore alla rete.
Input: array di dimensione uguale al numero degli ingressi che contiene un valore per ogni ingresso.

 

void GetOutput(NET* Net, REAL* Output);

Legge le uscite calcolate... Anche questa funzione è abbastanza inutile... :-)
Net: puntatore alla rete.
Output: array di dimensione uguale al numero delle uscite che viene riempito con le ultime uscite della rete.

 

REAL GetError(NET* Net);

Questa funzione è utile invece, infatti restituisce il valore dell'errore attuale della rete (che viene calcolato dopo ogni addestramento).
Net: puntatore alla rete.
Restituisce: valore dell'errore.

 

void SetParam(NET* Net, REAL alpha, REAL eta, REAL gain);

Setta i parametri della rete (lasciando inalterato tutto il resto).
Net: puntatore alla rete.
alpha: è il coefficiente di "momentum" della rete, può essere 0 se non si vuole utilizzare.
eta: è la velocità di apprendimento (learning rate) della rete.
gain: è il coefficiente di guadagno della funzione sigmoide (coeff. ad esponente), regola la piattezza della risposta.

 

void SaveNet(NET* Net, char* FileName);
NET* LoadNet(char* FileName);

Caricano e salvano la rete su file. Belli, ma usare con cura: non sono stati particolarmente testati in questa versione.
Net: puntatore alla rete.
FileName: puntatore alla stringa terminante per /0 che indica il nome e il percorso del file.
La funzione LoadNet restituisce il puntatore alla nuova rete creata.

 

void SimulateNet(NET* Net, REAL* Input, REAL* Output, REAL* Target, INTG Training);

Questa è la funzione principale. Permette di simulare la rete in avanti o di addestrarla a secondo del valore di Training. La funzione provvede anche a chiamare SetInput, GetOutput, e ad aggiornare l'errore della rete.
Net: puntatore alla rete.
Input: array di dimensione uguale al numero degli ingressi che contiene un valore per ogni ingresso.
Output: array di dimensione uguale al numero delle uscite che viene riempito con le uscite calcolate della rete.

Target: array di dimensione uguale al numero delle uscite che contiene il valore voluto delle uscite (in fase di addestramento).
Training: se vale 0 la rete viene fatta funzionare il avanti, se diverso da 0 la rete compie un passo di addestramento utilizzando Input e Target come coppia ingresso-uscita.

 

void Informations();

Questa simpatica funzione una volta invocata provoca la comparsa di una finestra message box con informazioni riguardanti il programma. Forse sarebbe stato più utile fare apparire anche informazioni riguardanti la rete... Sarà per la prossima versione... :-)

 

Per maggiori dettagli consultare i files forniti assieme alla libreria, sono presenti alcuni esempi di caricamento e di interfacciamento con il C e il Visual Basci, che possono essere utilizzati così come sono per potere utilizzare subito la libreria.

Consulta gli esempi di implementazione in C e VB:

Esempi di implementazione

Scarica il programma:

Neuro10b.zip

Neuro 1.0b è un programma freeware.
(leggi il file "Leggimi.txt" per maggiori informazioni)


Questa casa non
è un albergo!
Hosted by www.Geocities.ws

1