|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
[C++] Reti neurali back propagation
Bene,
avrei bisogno di un chiarimento relativamente al calcolo dell'errore degli strati nascosti della mia rete. Stando alla teoria, io trovo l'errore (dj) nel modo seguente: dj = Oj (1 - Oj) * Sommatoria( dk * Wkj ) dove con Oj indico il valore di ouptut del neurone nascosto, dk è l'errore del neurone dello strato successivo a quello corrente, Wkj sono i pesi relativi al neurone dello strato successivo appena menzionato. Nella sommatoria, devo tenere conto del valore soglia chiamato anche bias? Lo devo includere nella sommatoria al pari degli altri pesi? Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Nel tentativo di rispondermi direi di si.
E direi anche che devo modificarlo al pari degli altri, dato che la variazione dei pesi è dipendente dall'errore del layer successivo, e a sua volta dipende dal valore bias. Spero di spiegarmi Ad esempio il layer nascosto appena prima a quello di output avrà tutti i neuroni con il peso bias aggiuntivo.... questo verrà aggiornato con il delta calcolato.... Ultima modifica di Teo@Unix : 20-08-2010 alle 18:29. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
ad ogni passo la regola per l'aggiornamento dei pesi e' la seguente: ![]() ![]() Qui sopra o_i e' l'output del neurone i-esimo, t_i il valore target mentre \sigma' e' la derivata della funzione di attivazione, \eta infine e' il fattore di apprendimento (che non serve altro per modificare la velocita' con cui viene effettuato l'apprendimento) Quindi, se ho capito bene la tua domanda, la risposta e' si'
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele Ultima modifica di marco.r : 21-08-2010 alle 10:59. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Perfetto! Grazie.
Mi ritrovo. L'unica cosa è relativa alla sommatoria nel caso io mi trovi nel layer nascosto, il secondo caso illustrato. Qui a differenza della mia: Codice:
dj = Oj (1 - Oj) * Sommatoria( dk * Wkj ) Per fare questo calcolo io utilizzo una variabile che rimane invariata nel ciclo di aggiornamento successivo (per la sommatoria). Per intenderci, quando ciclo su ogni peso del neurone: Codice:
cur_bp_err += layers[l]->getNeuron(n)->getWeight(w)*error; Ad esempio in questo modo: Codice:
error = layers[l]->getNeuron(n)->trans_func_derivate(layers[l]->getNeuron(n)->getValue())*prev_bp_err; |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
ok! grazie molte per l'aiuto.
Ora devo trovare il modo di collaudare il tutto.... ma a me solitamente nulla funziona subito...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:17.






















