Neural network 多位神经异或网络
我试图训练一个8位的神经网络输出其输入的异或。我正在使用ffnet库(http://ffnet.sourceforge.net/). 对于少量输入位(最多4位),反向传播产生预期结果。对于8位,NN似乎“收敛”,这意味着它为任何输入输出相同的值。我使用多层神经网络:输入,隐藏层,输出,加上偏置节点 我做错什么了吗?这个NN是否需要具有一定的形状,才能学习XOR 编辑: 这是我正在使用的代码:Neural network 多位神经异或网络,neural-network,xor,Neural Network,Xor,我试图训练一个8位的神经网络输出其输入的异或。我正在使用ffnet库(http://ffnet.sourceforge.net/). 对于少量输入位(最多4位),反向传播产生预期结果。对于8位,NN似乎“收敛”,这意味着它为任何输入输出相同的值。我使用多层神经网络:输入,隐藏层,输出,加上偏置节点 我做错什么了吗?这个NN是否需要具有一定的形状,才能学习XOR 编辑: 这是我正在使用的代码: def experiment(bits, input, solution, iters): co
def experiment(bits, input, solution, iters):
conec = mlgraph( (bits, bits, 1) )
net = ffnet(conec)
net.randomweights()
net.train_momentum(input, solution, eta=0.5, momentum=0.0, maxiter=iters)
net.test(input, solution, iprint=2)
我使用momentum=0.0
来获得纯反向传播
这是我得到的结果的一部分:
Testing results for 256 testing cases:
OUTPUT 1 (node nr 17):
Targets vs. outputs:
1 1.000000 0.041238
2 1.000000 0.041125
3 1.000000 0.041124
4 1.000000 0.041129
5 1.000000 0.041076
6 1.000000 0.041198
7 0.000000 0.041121
8 1.000000 0.041198
每一个向量都是这样(256个值)你对神经元使用什么传递函数?这就是我使用的代码:一切似乎都正常。所以8位的意思是你给它类似于0 1 1 0 1 0 0 0 0 0的值,然后说它应该输出1?我会将隐藏层中的神经元数量从1调整到8,看看是否能得到更好的结果。当输入层和隐藏层相同时,可能会过度学习数据。不断地改变不同的因素,一次一个(例如,在隐藏层编号之后,我会稍微利用动量,因为你可能会陷入局部最小值)。通过将eta降低到0.1,并将迭代次数增加到1M,我让它工作了7位:)太棒了!Eta应该是学习率,对吗?