5

我想知道我是否做错了什么,或者结果是否真的那么差。让我们假设文档中显示的最简单的 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))

例如

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

预期为 0。我知道我显然可以四舍五入,但对于这样一个简单的示例,我仍然希望网络更加精确。它可以在这里被称为“工作”,但我怀疑我遗漏了一些重要的东西,因为这非常不可用......

问题是,如果你设置verbose=True为你的教练,你会看到非常小的错误(比如总错误:0.0532936260399)

我会假设网络的错误是 5%,那么在那之后激活功能怎么能这么多呢?

我显然将 pybrain 用于更复杂的事情,但我有同样的问题。即使网络说错误约为 0.09 左右,我也有大约 50% 的测试样本出错。

有什么帮助吗?

4

1 回答 1

6

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

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

我会将其作为评论发布,因为它不能完全回答问题,但我没有足够的评论点...

于 2012-10-30T09:48:40.747 回答