pybrain效果不佳

时间:2012-10-30 07:59:02

标签: python neural-network xor pybrain

我想知道我做错了什么,或者结果真的那么差。让我们假设最简单的NN示例,如文档中所示:

>>>net = buildNetwork(2, 3, 1, bias=True)
>>> 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(net, ds)
>>> trainer.trainUntilConvergence()
>>> print net.activate((0,0))
>>> print net.activate((0, 1))
>>> print net.activate((1, 0))
>>> print net.activate((1, 1))

e.g

>>> print net.activate((1,0))
[ 0.37855891]
>>> print net.activate((1,1))
[ 0.6592548]

预计是0.我知道我可以明显地圆但仍然我希望网络对于这样一个简单的例子更精确。它可以被称为“工作”在这里,但我怀疑我错过了一些重要的原因,因为这是非常无法使用...

问题是,如果您将verbose=True设置为您的教练,您可以看到相当小的错误(如总错误:0.0532936260399)

我认为网络的误差是5%,那么之后激活功能怎么样呢?

我使用pybrain显然更复杂,但我有同样的问题。即使网络说错误大约是0.09左右,我也会得到大约50%的测试样本错误。

有任何帮助吗?

1 个答案:

答案 0 :(得分:6)

可以找到类似的问题here。从那里开始,似乎这个训练功能在这里不适用,因为并非所有数据都用于训练,但是一些数据用于交叉验证。尝试多次将数据点添加到训练集。

此外,这个例子似乎需要一个动量项才能起作用。有一个使用pybrain训练xor的例子,使用不同的训练方法here,当我将层数设置为3时,它对我有用。这使用0.99的动量项。

我会将此作为评论发布,因为它没有完全回答这个问题,但我没有足够的评论来评论......