1

我创建使用PyBrain一个简单的神经网络:为什么我的神经网络显示奇怪的结果?

from pybrain.tools.shortcuts import buildNetwork 
from pybrain.datasets import SupervisedDataSet 
from pybrain.supervised.trainers import BackpropTrainer 

    L_Z = [ 
    0b111111, 
    0b000010, 
    0b000100, 
    0b001000, 
    0b010000, 
    0b111111 
    ] 

C_Z = [ 
    0b111111, 
    0b100001, 
    0b000110, 
    0b000001, 
    0b100001, 
    0b111111 
    ] 

net = buildNetwork(6, 3, 1) 


ds = SupervisedDataSet(6, 1) 

ds.addSample(tuple(L_Z), (1,)) 
ds.addSample(tuple(C_Z), (0,)) 

trainer = BackpropTrainer(net, ds) 
trainer.trainUntilConvergence() 


print net.activate(L_Z) 
print net.activate(C_Z) 

但每一个运行程序后,显示出不同的结果。我的网络应该学会找到英文'Z'字母和西里尔字母'З'。哪里不对?

回答

2

你的方法根本上是不正确的。具有6个输入的网络意味着每个输入都是可以从0到1的浮点数.PyBrain不会告诉您何时给出的值太高或太低。例如,0b111111实际上是63.如果您需要每个检测单元的输入,则需要使用具有36个输入的网络。

L_Z = [ 
    1,1,1,1,1,1, 
    0,0,0,0,1,0, 
    0,0,0,1,0,0, 
    0,0,1,0,0,0, 
    0,1,0,0,0,0, 
    1,1,1,1,1,1 
    ] 

C_Z = [ 
    1,1,1,1,1,1, 
    1,0,0,0,0,1, 
    0,0,0,1,1,0, 
    0,0,0,0,0,1, 
    1,0,0,0,0,1, 
    1,1,1,1,1,1 
    ] 

net = buildNetwork(36, 3, 1) 


ds = SupervisedDataSet(36, 1) 

ds.addSample(L_Z, [1]) 
ds.addSample(C_Z, [0]) 

trainer = BackpropTrainer(net, ds) 

for x in range(1000): 
    trainer.train() 

print net.activate(L_Z) 
print net.activate(C_Z) 

我很惊讶.trainUntilConvergeance()工作,通常它搁置数据的1/4日进行验证,如果你只给了它两个例子它通常会崩溃。在任何情况下,这些代码都可以用于你想要的结果,但是如果你想要做计算机视觉,他们通常会使用多种方法来检测事物。

0

神经网络是矢量随机初始化收敛。但取决于模型,每个单元格都与上层的其他每个单元格链接,因此它意味着没有顺序。

=>与值A,B神经网络,c为等同于B,C,A或C,B,A例如(粗略地说)

这加上它们启动的事实随机给你的答案是:许多模型都可以解决你的问题,并且每次连续的迭代收敛到一个或另一个时