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]
Avete randomizzato la forza sinapsi iniziale tra i nodi? – Renan
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. –
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