作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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”字母和西里尔语“З”字母。怎么了?
最佳答案
您的方法根本上是错误的。具有 6 个输入的网络意味着每个输入都是一个可以从 0 到 1 的 float 。当您给出的值过高或过低时,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 的数据进行验证,如果你只给它两个例子,它通常会崩溃。无论如何,这段代码都可以达到您想要的结果,但如果您尝试进行计算机视觉,通常他们会使用多种方法的组合来检测事物。
关于python - 为什么我的神经网络显示奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006971/
我是一名优秀的程序员,十分优秀!