на основе PyBrain's tutorials мне удалось сколотить следующий код:Как создать простую 3-слойную нейронную сеть и научить ее с помощью контролируемого обучения?
#!/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]
Он должен узнать функцию XOR, но результаты кажутся совершенно случайно:
0,208884929522
0.168926515771
0,459452834043
0,424209192223
или
0,84956138664
0,888512762786
0,564964077401
0,611111147862
Существует ли какой-либо метод для обучения сети до тех пор, пока средняя ошибка не будет ниже (или равна), чем требуется, или был достигнут предел для числа эпох? – Luke
Документация @Luke PyBrain честно заявляет, что «эта документация содержит только субъективную выдержку доступных методов». Поэтому вам нужно будет изучить реализацию вашего конкретного дистрибутива PyBrain. Но даже если этого не происходит, очень легко реализовать такой цикл самостоятельно. – BartoszKP