2011-09-20 15 views
6

dopo aver letto alcuni articoli sulla rete neurale (back-propagation) provo a scrivere una semplice rete neurale da solo.propagazione back-network neurale, errore nella formazione

ive ha deciso XOR neurale-rete, il mio problema è quando sto cercando di addestrare la rete, se io uso solo un esempio per addestrare la rete, consente di dire 1,1,0 (come input1, input2, targetOutput). dopo 500 treni + - la rete risponde 0.05. ma se sto provando più di un esempio (diciamo 2 diverse o tutte le 4 possibilità) la rete punta a 0.5 come output :( ho cercato in google per i miei errori senza risultati: S mal provate a dare tanti dettagli come posso per aiutare a trovare ciò che di sbagliato:.

reti provato -ive con 2,2,1 e 2,4,1 (inputlayer, hiddenlayer, outputlayer)

-la uscita per ogni neurale definita da:

double input = 0.0; 
     for (int n = 0; n < layers[i].Count; n++) 
      input += layers[i][n].Output * weights[n]; 

mentre 'i' è il livello corrente e il peso sono tutti i pesi dal precedente strato esterno.

-il ultimo strato (strato di output) errore è definito da:

value*(1-value)*(targetvalue-value); 

mentre 'valore' è l'uscita neurale e 'targetvalue' è l'uscita di destinazione per la corrente neurale.

-il errore per gli altri neurals definiscono da:

foreach neural in the nextlayer 
      sum+=neural.value*currentneural.weights[neural]; 

-tutti i pesi della rete vengono adattarsi da questa formula (il peso da neurale -> neurale 2)

weight+=LearnRate*neural.myvalue*neural2.error; 

mentre LearnRate è il tasso di apprendimento nework (definito 0,25 nella mia rete). biasweight -il per ogni neurale è definita da:

bias+=LearnRate*neural.myerror*neural.Bias; 

bias valore const = 1.

che praticamente tutto quello che posso dettaglio, come ho detto l'obiettivo di essere uscita 0.5 con diversi esempi di addestramento :(

Grazie molto molto per il vostro aiuto^_ ^.

+2

Hai scritto la tua implementazione o sta utilizzando un framework? –

+0

È davvero divertente che non possa rispondere alla sua domanda dopo che è stata protetta :) – PythEch

risposta

1

E ' difficile capire dove si trova l'errore senza vedere il codice completo. Una cosa che dovresti controllare attentamente è che il tuo calcolo del gradiente di errore locale per ogni unità corrisponde alla funzione di attivazione che stai usando su quel livello. : http://www.learnartificialneuralnetworks.com/backpropagation.html.

Ad esempio, th Il calcolo che fai per il livello di output presuppone che tu stia utilizzando una funzione di attivazione sigmoidea logistica, ma non lo menzioni nel codice sopra, quindi sembra che tu stia utilizzando una funzione di attivazione lineare.

In linea di principio una rete 2-2-1 dovrebbe essere sufficiente per imparare XOR anche se la formazione verrà a volte intrappolata in un minimo locale senza essere in grado di convergere allo stato corretto. Quindi è importante non trarre conclusioni sulle prestazioni del proprio algoritmo da una singola sessione di allenamento.Si noti che il semplice backprog è destinato ad essere lento, ci sono soluzioni più veloci e più robuste come Rprop, per esempio.

Ci sono libri sull'argomento che forniscono calcoli dettagliati passo-passo per una rete semplice (ad es. "A.I .: una guida ai sistemi intelligenti" di Negnevitsky), questo potrebbe aiutarti a eseguire il debug del tuo algoritmo. Un'alternativa sarebbe quella di utilizzare un framework esistente (ad esempio Encog, FANN, Matlab) per impostare esattamente la stessa topologia e i pesi iniziali e confrontare il calcolo con la propria implementazione.

Problemi correlati