【问题标题】:Why can't PyBrain Learn Binary为什么 PyBrain 不能学习二进制
【发布时间】:2017-01-13 09:46:14
【问题描述】:

我正在尝试建立一个网络(PyBrain)来学习二进制。这是我的代码,它的返回值保持在 8 左右,但当我使用此目标激活时,它应该返回 9。

from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import *
from pybrain.datasets import *
from pybrain.supervised.trainers import BackpropTrainer
from matplotlib.pyplot import *


trains = 3000
hiddenLayers = 4
dim = 4
target = (1, 0, 0, 1)

ds = SupervisedDataSet(dim, 1)

ds.addSample((0, 0, 0, 0), (0,))
ds.addSample((0, 0, 0, 1), (1,))
ds.addSample((0, 0, 1, 0), (2,))
ds.addSample((0, 0, 1, 1), (3,))
ds.addSample((0, 1, 0, 0), (4,))
ds.addSample((0, 1, 0, 1), (5,))
ds.addSample((0, 1, 1, 0), (6,))
ds.addSample((0, 1, 1, 1), (7,))
ds.addSample((1, 0, 0, 0), (8,))


net = buildNetwork(dim, hiddenLayers, 1, bias=True, hiddenclass=SigmoidLayer)
trainer = BackpropTrainer(net, ds)

tests = []

for i in range(trains):
    trainer.train()
    tests.append(net.activate(target))


plot(range(len(tests)), tests)


print net.activate(target)
show()

我尝试调整隐藏层的数量,从 TanhLayer 到 SigmoidLayer 的隐藏类,并改变了火车的数量,但它总是收敛大约 500 次(将网络训练到数据集)。我应该使用与反向传播不同的训练器吗?如果是,为什么?

【问题讨论】:

  • 总是收敛在 500 左右? 500 什么?
  • 将网络训练到数据集 500 次后
  • 你使用什么样的输出传递函数?坦西格?线性的?

标签: python neural-network artificial-intelligence pybrain


【解决方案1】:

您已经构建了一个包含 4 个输入节点、4 个隐藏节点、1 个输出节点和 2 个偏差的网络。

将每个字母视为该节点的激活,我们可以说每个隐藏节点将其激活计算为 sigmoid(w0*1 + w1*A + w 2*B + w3*C + w4*D),输出节点计算其激活为 (w0 *1 + w1*E + w2*F + w3*G + w4 sub>*H)(没有 sigmoid)。图中的线数是模型中在学习过程中调整的权重参数的数量。

有这么多参数,但只有 9 个样本需要训练,网络可以收敛到许多局部最优、不完全正确的解决方案。

解决此问题的一种方法是增加训练样本的数量。您可以概括过去的 1 和 0,并提供 ((0, 0, 1.0, 0.5), (2.5,)) 和 ((0, 1.2, 0.0, 1.0), (5.8,)) 等样本。

另一个选择是简化您的模型。完美解决方案只需要 4 个输入直接连接到输出,没有偏差或 sigmoid。该模型只有 4 个权重,训练将设置为 1、2、4 和 8。最终计算为 1*A + 2*B + 4*C + 8*D。

【讨论】:

    【解决方案2】:

    我建议您将目标设置在中间而不是边缘。

    我尝试将训练数据向上扩展为 10 和 11,然后它在预测 9 时产生了更好的结果,即使在训练数据中省略了 9。此外,如果您尝试预测 4,即使您在训练数据中没有 4,也会得到相当不错的结果。

    根据我的经验,我认为神经网络不会轻易猜测超出测试数据边界的数字。

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 2014-08-08
      • 1970-01-01
      • 2021-02-23
      • 2019-09-06
      • 2018-04-05
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      相关资源
      最近更新 更多