为什么我的神经网络显示出奇怪的结果?

2024-10-02 18:14:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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”和西里尔字母“З”。怎么了?在


Tags: fromimportnetds神经网络activateprinttuple
2条回答

神经网络是随机初始化并收敛的向量。但是根据模型的不同,每一个单元都链接到上层的其他单元,所以这意味着没有顺序。在

=>;值为a、b、c的神经网络等价于b、c、a或c、b、a(粗略地说)

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

你的方法根本不正确。一个有6个输入的网络意味着每个输入都是一个从0到1的浮点数。当你的价值观太低的时候,你的大脑就会告诉你。例如,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)

我很惊讶。trainUntilConvergence()正在工作,通常它会留出1/4的数据进行验证,如果你只举两个例子,它通常会崩溃。在任何情况下,这段代码都能得到你想要的结果,但是如果你想做计算机视觉,他们通常会使用多种方法来检测物体。在

相关问题 更多 >