如何创建简单的3层神经网络并使用监督学习进行教学?

Luk*_*uke 6 python python-2.7 pybrain

基于PyBrain的教程,我设法将以下代码拼凑在一起:

#!/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]
Run Code Online (Sandbox Code Playgroud)

它应该学习XOR函数,但结果似乎很随机:

0.208884929522

0.168926515771

0.459452834043

0.424209192223

要么

0.84956138664

0.888512762786

0.564964077401

0.611111147862

Bar*_*zKP 8

您的方法存在四个问题,在阅读神经网络常见问题解答后都很容易识别:

通过这些修复,我得到了一致的结果,并且给定网络的结果与给定的数据集一致,并且误差小于1e-23.