podstawie PyBrain's tutorials udało mi się wbić razem następujący kod:Jak utworzyć prostą, trójwarstwową sieć neuronową i nauczać ją za pomocą nadzorowanego uczenia?
#!/usr/bin/env python2
# coding: utf-8
from pybrain.structure import FeedForwardNetwork, LinearLayer, SigmoidLayer, FullConnection
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
n = FeedForwardNetwork()
inLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outLayer = LinearLayer(1)
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
n.sortModules()
ds = SupervisedDataSet(2, 1)
ds.addSample((0, 0), (0,))
ds.addSample((0, 1), (1,))
ds.addSample((1, 0), (1,))
ds.addSample((1, 1), (0,))
trainer = BackpropTrainer(n, ds)
# trainer.train()
trainer.trainUntilConvergence()
print n.activate([0, 0])[0]
print n.activate([0, 1])[0]
print n.activate([1, 0])[0]
print n.activate([1, 1])[0]
to miało nauczyć funkcji XOR, ale wyniki wydają się zupełnie przypadkowo:
0,208884929522
0.168926515771
0.459452834043
0,424209192223
lub
0,84956138664
0,888512762786
0,564964077401
0,611111147862
Czy istnieje metoda szkolenia sieci, dopóki średni błąd nie jest mniejszy (lub równy) niż wymagany lub nie osiągnięto limitu liczby epok? – Luke
Dokumentacja @Luke PyBrain uczciwie stwierdza, że "Ta dokumentacja zawiera tylko subiektywny fragment dostępnych metod". Musisz więc przyjrzeć się implementacji swojej konkretnej dystrybucji PyBrain. Ale nawet jeśli nie jest, bardzo łatwo jest wdrożyć taką pętlę samodzielnie. – BartoszKP