Pages: 1 ... 5 6 [7] 8 9 10   Go Down
Author Topic: Semplice rete neurale per Arduino 2  (Read 12868 times)
0 Members and 1 Guest are viewing this topic.
0
Online Online
Sr. Member
****
Karma: 3
Posts: 455
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi viene in mente per esempio la possibilità di prendere una decisione sul valore di più sensori, come farebbe un esperto.
Di solito si fa con la Fuzzy Logic. Ma non è che questo argomento non si interessante....

Io suggerirei di realizzare prima uno sketch che utilizzi una rete neurale addestrata su PC. Dovrebbe essere più facile. I pesi potrebbero essere inseriti nel codice, se pochi, oppure letti da una SD, eeprom, piccole memorie I2C.
Poi mi butterei sull'allenamento su Arduino perché la motivazione di yoshi93 mi sembra valida.
Logged

Offline Offline
Sr. Member
****
Karma: 4
Posts: 342
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ratzeni:
Grazie dell'aiuto, non mi sarei mai immaginato che fosse il parseFloat() il problema, cominciavo a pensare che fosse un problema intrinseco della mia implementazione. Aspetto ulteriori conferme del funzionamento da parte di altri prima di cantare vittoria (la prudenza non è mai troppa).
Per quanto riguarda l'addestramento da sensori ci sto pensando. Purtroppo però in questo periodo non ho molto tempo nè voglia di mettermi a scrivere codice o pensare seriamente a esempi perchè c'è fisica e un po' di esami che incombono su di me smiley-sad-blue. L'unica dritta che mi viene in mente riguardo una possibile applicazione è quella di copiare il funzionamento di un circuito. Come input si prendono gli input e gli output del circuito di test e poi si usano i dati per addestrare la rete. Con una rete si potrebbero copiare abbastanza circuiti senza dover modificare il software tramite pc.

@zoomx:
Riguardo l'utilizzo del pc aspetto di avere conferme sulla correttezza del mio codice prima di avventurarmi nella scrittura dei metodi per il caricamento/salvataggio dei pesi . Credo comunque che dovrete attendere 1-2 mesi per vedere qualche prima versione di questo tipo.
Logged

Offline Offline
Sr. Member
****
Karma: 4
Posts: 342
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Piccolo update:
Questa sera ho provato a modificare la libreria per arduino due in modo da renderla compatibile con la uno. Purtroppo però sebbene io abbia usato le matrici e solo una classe come implementazione non c'è stato nulla da fare. L'unico modo per risparmiare spazio è quello di non creare dinamicamente la rete e fissare tutti i valori sullo sketch. Questo però fa perdere la natura generica che dovrebbe avere un modulo percui ho deciso di annullare lo sviluppo sulla UNO in favore della DUE soltanto.
Per la uno esiste già: http://robotics.hobbizine.com/arduinoann.html (fortuna che non ho perso tempo a reinventare la ruota  smiley-razz).
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vorrei capire alcune cose, dopo aver letto quella pagina:
il numero di neuroni viene stabilito all'inizio in base al compito da svolgere, giusto?
ma una rete neurale "nuova" è inizialmente vuota, giusto? solo dopo l'apprendimento può svolgere una funzione? l'apprendimento va fatto con la funzione che la rete deve interpretare, quindi una volta appreso un compito la rete sa svolgere solo quello, giusto?
Logged


Offline Offline
Sr. Member
****
Karma: 4
Posts: 342
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@leo72:
1) sì, il numero di neuroni viene stabilito all'inizio in base al compito da svolgere (come nella mia liubreria) anche se non esistono metodi matematici per decidere esattamente quanti ce ne vogliono. Un utente esperto più o meno sa come strutturare la rete però per applicazioni che richiedono una buona ottimizzazione si ricorre ad algoritmi genetici. Le performance della rete dipendono molto dal numero di neuroni e dalla struttura (come nel cervello del resto).

2)Non so cosa intenda tu per vuota. Il numero di neuroni è fissato e i loro valori sono casuali all'inizio. Se con vuota intendi che non sa fare nulla allora sì, è vuota. Una parte importante delle reti neurali è appunto il salvataggio/caricamento dei pesi.

3)Sì, solo dopo l'apprendimento può svolgere una funzione.

4)La funzione che può replicare è una alla volta. Questo non ti vieta però di mettere assieme più training sets per farne uno solo percui il problema è sempre scegliere la struttura della rete in modo tale che apprenda al meglio. Usare una rete per ogni funzione è solo più comodo perchè le hai separate.
A differenza di un algoritmo fissato però la rete può riapprendere percui se ne hai una installata su un sistema embedded puoi riprogrammare tutto fornendo degli esempi di quello che dovrà fare senza attaccare nulla al pc.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì per "vuota" intendevo senza apprendimento. smiley
Grazie delle spiegazioni.
Logged


Offline Offline
Sr. Member
****
Karma: 4
Posts: 342
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non è che potresti provare lo sketch di ratzeni per avere conferma del funzionamento della mia libreria?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non sono a casa al momento, per cui posso parlare e basta
Logged


Rome/Italy
Offline Offline
Newbie
*
Karma: 1
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@yoshi93, ti allego lo screenshoot.
ciao


* esempi calcolo sinX.jpg (87.67 KB, 1366x768 - viewed 52 times.)
Logged

Offline Offline
Sr. Member
****
Karma: 4
Posts: 342
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie ratzeni, non è che non mi fidi di te ma è solo una sicurezza in più per eliminare ogni dubbio. Se a due persone risulta corretto le probabilità che la buona riuscita dipenda da fattori casuali si riduce smiley-mr-green.
Logged

Rome/Italy
Offline Offline
Newbie
*
Karma: 1
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@yoshi93
Non c'è problema, dato che non puoi provarlo avrei dovuto mandartelo con il precedente post.
ciao
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per 20° e 160° vedo 0.32 e 0.34
Per 60° e 120° si ha 0.88 e 0.86.
Non dovrebbero essere uguali? O l'approssimazione di 2 centesimi di grado va bene?
Logged


Offline Offline
Sr. Member
****
Karma: 4
Posts: 342
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì, vanno bene. La precisione non era un requisito che avevo preso in considerazione. Si possono raggiungere risultati migliori addestrando la rete per più tempo ma non è detto che scenda sotto l'errore prefissato.
Logged

Offline Offline
Sr. Member
****
Karma: 4
Posts: 342
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma alla fine oltre a ratzeni ci sono altri che hanno provato a vedere se funziona tutto?

P.S. UP  smiley-razz
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

eh, mi sa che le due sono ancora rare in giro, non so quanti utenti abituali del forum la abbiano.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: 1 ... 5 6 [7] 8 9 10   Go Up
Jump to: