PDA

View Full Version : [C/C++] Rete neurale ff con back-propagation


Teo@Unix
27-11-2010, 11:53
Ho ripreso in mano la faccenda reti neurali, come mi aveva consigliato al tempo marco.r ho utilizzato le matrici per avere maggior velocità e praticità.

Il problema che ho riguarda una rete a 3 livelli. Due input, due nascosti, un output. La rete deve imparare l'XOR, questa, a volte funziona a volte no..... utilizzo per neuroni nascosti e output la sigmoide, ho un bias aggiuntivo per questi ultimi due strati.

Quando la rete arriva a funzionare lo fa comunque con migliaia di cicli di apprendimento.... fra l'altro l'errore cala di colpo... da un output errato per migliaia di epoche poi tutt'ad un tratto converge.

mi chiedevo dunque dove può essere l'errore....

Teo@Unix
27-11-2010, 18:26
inizializzo i pesi tra -1 e 1.... la rete ci mette un numero di epoche variabile comunque alto, sapevo che l'algoritmo di back-propagation richiede molte iterazioni, ma nel mio caso sono 50000 a volte 27000 a volte più di 100000, ma così tante? :( non credo...

Teo@Unix
27-11-2010, 23:26
vorrei capire se una cosa del genere è ammessa.. oppure è proprio sbagliato, la back-propagation è semplice. Non c'è momentum o altro...

grazie.

!fazz
28-11-2010, 08:11
a parte la sezione sbagliata cmq si il comportamente di una ff è circa quello

Teo@Unix
28-11-2010, 11:27
a parte la sezione sbagliata cmq si il comportamente di una ff è circa quello

graze, dunque devo comunque ritenerlo coretto come comportamento?

A ma perchè sezione sbagliata? Non sto usando tool, la rete lo fatta io.

!fazz
29-11-2010, 10:16
graze, dunque devo comunque ritenerlo coretto come comportamento?

A ma perchè sezione sbagliata? Non sto usando tool, la rete lo fatta io.

perchè il funzionamento di una rete ff non è una domanda di programmazione, anderebbe quà

http://www.hwupgrade.it/forum/showthread.php?t=1321413

banryu79
29-11-2010, 10:46
[OT]
Consiglio a Teo@Unix di includere un link alla sua vecchia discussione, giusto per riferimento, così un eventuale lettore esperto può ripescare il "contesto" anche da lì (e ricostruire il filo del discorso più agevomente).

Supdario
29-11-2010, 13:53
vorrei capire se una cosa del genere è ammessa.. oppure è proprio sbagliato, la back-propagation è semplice. Non c'è momentum o altro...

grazie.

Io ho recentemente scritto una rete neurale con il metodo Error Back-Propagation, e per ottenere le massime "prestazioni" ci vorrebbe sia il momentum (che di solito viene fissato a 0.1) che il learning rate (che di solito si imposta a 0.5, ma spesso va regolato).

Se vuoi aumentare la velocità di apprendimento ti consiglio di sostituire la funzione sigmoide e la sua derivata per usare la funzione tangente iperbolica (tanh) e la sua derivata 1-x*x. A volte può dare risultati inaspettati (come succedeva a me), ma spesso la velocità aumenta in modo impressionante.

Ti consiglio anche di inizializzare i pesi in modo che siano centrati sullo 0, quindi cerca di non andare oltre al range -0.3 e +0.3, inoltre ricordati di inizializzare opportunamente il generatore pseudorandom con "srand((unsigned)time(NULL));".

Teo@Unix
29-11-2010, 15:48
grazie per le risposte, mi sposto nella sezione adeguata, il prossimo messaggio lo inserirò lì, più link a questa.

Farò un pò di prove, in primis con il momentum, poi valuterò anche di cambiare la funzione, ho visto che ci sono molte funzioni alternative ricavate sulla sigmoidale.

Intanto grazie.

Teo@Unix
01-12-2010, 12:35
Il punto è che li non mi risponde nessuno...

cmq se sapete darmi un consiglio il post è questo:
http://www.hwupgrade.it/forum/showthread.php?t=2285924

Thank you.