Go Down

Topic: Semplice rete neurale per Arduino 2 (Read 45240 times) previous topic - next topic

yoshi93

#30
Apr 08, 2013, 10:31 pm Last Edit: May 02, 2013, 09:35 pm by yoshi93 Reason: 1
Si, ho guradato pure io. Alcune sono degli insiemi di funzioni mentre altre gestiscono reti binarie come quella che ho in mente di fare io per UNO. Per completezza ed in vista di eventuali aggiunte (vedasi il mio primo post) carico anche la libreria per pc con relativo esempio funzionante della funzione seno. Purtroppo per motivi di spazio è in due file.

yoshi93

#31
May 02, 2013, 09:36 pm Last Edit: May 06, 2013, 10:34 pm by yoshi93 Reason: 1
Update:
Riposto la libreria modificata per consumare meno ram in esecuzione (purtroppo però non sono riuscito a scendere sotto il 14% di spazio occupato come dimensione :smiley-sweat:).
Facendo delle prove ho notato come l'inizializzazione dei valori iniziali dei pesi sia fondamentale. La nuova versione richiede quindi l'uso di randomSeed() nei vostri file che usano la libreria per inizializzare il seme dei numeri casuali.
I metodi loadWeights() e saveWeights() sono ancora in fase di sviluppo quindi non usateli.

Scusate il doppio post.

leo72


yoshi93


leo72

Mi son dimenticato...  :smiley-sweat:
Ora la carico, anche se (come ti ho già detto, non so a cosa serva figurati come usarla  :smiley-yell: )

leo72

Ho riprovato la lib con lo sketch che avevi messo in 2a pagina ma ricevo questo errore:
Code: [Select]

ArdFeedForward/ArdFeedForward.cpp.o: In function `nop':
/home/leo/Arduino/libraries/ArdFeedForward/ArdFeedForward.cpp:3: multiple definition of `nop()'
sketch_may06a.cpp.o:/home/leo/Documenti/Software/Programmazione/Arduino/arduino-1.5.x/sketch_may06a.ino:12: first defined here
collect2: ld returned 1 exit status

Forse dipende dal fatto che quello sketch non è compatibile con la nuova versione della lib?

lestofante

la funziona nop() a naso è autoinclusa dall'ide, probabilmente è una funzione inserita di recente, e quindi nel suo codice che usa un ide più vecchio l'ha dovuta scrivere da sè. essendo la nop() una funzione dal funzionamento abbastanza standard, potresti provare a metetterla (quella della sua lib, non quella ufficiale! :) ) nei define in base alla versione dell'ide, e incrociare le dita che sia uguale come parametri/funzionamento.
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

leo72

Sì, commentando la definizione della funzione nop presente nello sketch, questo compila e funziona. Continuo a non capire però la questione dell'autoapprendimento.
Ho dovuto mettere un Serial.print per vedere, una volta entrato lì dentro, quanto ci sta la rete ad "autoimparare". Una volta arrivato a 100.000 (un quarto d'ora...), perché il seno di 56 da 0.00 diventa -0.03?  :smiley-sweat:

lestofante

te l'ho detto, non è nemmeno detto che riesca ad imparare...tutto dipende dai neuroni usati e dal loro numero.
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

leo72

Anzi, per dirla tutta, mi pare che non faccia neanche bene i conti perché dopo l'apprendimento, qualunque numero scriva sul monitor, il suo seno è sempre -0.03  XD

lestofante

bhe, esiste anche il problema della divergenza della funzione, ovvero ad un certo punto la rete "impazzisce" e anzichè imparare impazzisce. Ma in tal caso credo sia più un problema dell'agoritmo di feed-back, overo quello che data la differenza tra risultato atteso e risulato voluto ricalcola i pesi dei neuroni
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

leo72

Non ci capisco una mazza  :smiley-yell:
Ma non si potrebbe avere un esempio "concreto" dell'utilizzo di una rete neurale in un compito "reale"?  :smiley-sweat:

lestofante

gli OCR, ovvero quelli che da testo scannerizzato passano a testo "digitale" sono un esempio pratico di tutti i giorni.
http://it.wikipedia.org/wiki/Rete_neurale
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

leo72

No no... io intendevo proprio un esempio pratico con l'Arduino che faccia qualcosa di più di calcolare (male) un senso  ;)

lestofante

un esempio pratico? considerando che hai la 2, puoi leggere un'immagine da una camera seriale (esempio un biscotto), ed in base ad una rete addestrata capire se e quale dei biscotti è. Se non erro è stato proprio uno dei primi impieghi delle NN nel mondo industriale
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

Go Up