2013-06-10 11 views
5

Sto provando ad addestrare una semplice rete neurale con Pybrain. Dopo l'allenamento voglio confermare che nn sta funzionando come previsto, quindi attivo gli stessi dati con cui l'ho allenato. Tuttavia, ogni attivazione genera lo stesso risultato. Sto fraintendendo un concetto di base sulle reti neurali o è questo in base alla progettazione?Pybrain restituisce lo stesso risultato per qualsiasi input

Ho provato a modificare inutilmente il numero di nodi nascosti, il tipo di hiddenclass, il bias, il tasso di apprendimento, il numero di epoche di allenamento e lo slancio.

Questo è il mio codice ...

from pybrain.tools.shortcuts import buildNetwork         
from pybrain.datasets import SupervisedDataSet         
from pybrain.supervised.trainers import BackpropTrainer 

net = buildNetwork(2, 3, 1) 
net.randomize()              

ds = SupervisedDataSet(2, 1)              
ds.addSample([77, 78], 77)               
ds.addSample([78, 76], 76)               
ds.addSample([76, 76], 75)               

trainer = BackpropTrainer(net, ds)             
for epoch in range(0, 1000):                 
    error = trainer.train()                  
    if error < 0.001:                   
     break              

print net.activate([77, 78])              
print net.activate([78, 76])              
print net.activate([76, 76]) 

Questo è un esempio di ciò che i risultati possono essere ... Come si può vedere l'uscita è la stessa anche se gli ingressi di attivazione sono diversi.

[ 75.99893007] 
[ 75.99893007] 
[ 75.99893007] 
+0

Avete randomizzato la forza sinapsi iniziale tra i nodi? – Renan

+0

con net.randomize? Ci avevo già provato, ma l'ho riaggiunto nel caso avessi ancora lo stesso problema. Ho aggiornato il mio esempio di codice per riflettere questo. –

+0

Affinché un ANN funzioni correttamente, le sue sinapsi devono essere randomizzate quando vengono generate. Quando hanno tutti la stessa forza, ottieni lo stesso risultato per ogni neurone nell'ultimo livello, quindi ho davvero pensato che fosse così. – Renan

risposta

2

Alla fine ho risolto questo normalizzando i dati tra 0 e 1 ed anche formazione finché il tasso di errore hit 0,00001. Ci vuole molto più tempo per allenarsi, ma ora ottengo risultati accurati.

+0

Ti dispiacerebbe pubblicare il codice finale che hai usato? –

+1

Il codice è nella domanda. Basta cambiare il bit dove dice 'se l'errore <0.001' a' se l'errore <0.00001'. Inoltre ho dovuto pre-normalizzare i dati in modo che tutti i numeri fossero compresi tra 0 e 1. –

3

ho avuto un problema simile, sono stato in grado di migliorare l'accuratezza (cioè ottenere risposta diversa per ogni ingresso) facendo quanto segue.

  1. Normalizzazione/standardizzazione ingresso e uscita alla rete neurale

Problemi correlati