2012-10-30 42 views
5

我想知道如果我做错了什么,或者结果真的很差。让我们假设最简单的例子NN中所示的文件:pybrain效果不佳

>>>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%是错误的。

任何帮助吗?

+0

[神经网络训练与PyBrain的可能重复不收敛](http://stackoverflow.com/questions/12050460/neural-network-training-with-pybrain-wont-converge) – PhoneixS

回答

6

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

此外,这个例子似乎需要有一个动力术语来工作。有一个用pybrain训练xor的例子,使用不同的训练方法here,当我将层数设置为3时,它适用于我。这使用0.99的动量项。

我会张贴此作为一个评论,因为它不能完全回答这个问题,但我没有足够的积分评论...

+0

你是对的,我需要减少用于验证的数据部分 – kosta5