У меня есть следующий код:PyBrain: Почему PyBrain NN не учится классифицировать XOR?
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer
ds = SupervisedDataSet(2, 1)
ds.addSample((0, 0), (0,))
ds.addSample((0, 1), (1,))
ds.addSample((1, 0), (1,))
ds.addSample((1, 1), (0,))
net = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer)
trainer = BackpropTrainer(net, ds)
trainer.trainUntilConvergence()
print '0,0 : {0}'.format(net.activate([0, 0]))
print '0,1 : {0}'.format(net.activate([0, 1]))
print '1,0 : {0}'.format(net.activate([1, 0]))
print '1,1 : {0}'.format(net.activate([1, 1]))
Выхода я сходиться всегда к чему-то другому, что XOR. Пример для выхода, который я получил:
0,0 : [ 1.33865922]
0,1 : [ 0.78127428]
1,0 : [ 0.8318278]
1,1 : [ 0.48067]
причины trainUntilConvergence() не работает, потому что этот метод будет разделять ваши данные в 75% обучение и 25% проверки. Поскольку у вас есть только 4 выборочных данных по проблеме XOR, 1 данные были вывезены в качестве данных валидации, и обучение проводится только по оставшимся 3 данным. Поэтому решение, обнаруженное сетью, плохо, потому что данные обучения неполны для всех случаев XOR – dnth
Я этого не знал. В чем смысл «валидации»? Он проверяет, хорошо ли он обучен (например, когда у вас установлен набор тренировок и набор тестов)? Или «валидация» - это еще один шаг, который предпринимается во время обучения нейронной сети? – SomethingSomething
Да, в этом случае проверка является набором тестов, который изолирован во время обучения и используется только для тестирования сети во время обучения. – dnth