【问题标题】:Thresholding for neural networks神经网络的阈值
【发布时间】:2018-10-27 06:02:46
【问题描述】:

我用 2 个输入单元、2 个隐藏单元和 1 个输出单元实现了与门的神经网络。 我使用 40 个输入对神经网络进行了 200 个 epoch 的训练,学习率为 0.03。 当我尝试测试经过训练的神经网络的 AND 输入时,它给我的输出为:

  1. 0,0 = 0.295(预期为 0)
  2. 0,1 = 0.355(预期为 0)
  3. 1,0 = 0.329(预期为 0)
  4. 1,1 = 0.379(预期为 1)

这不是网络预期的输出。但是如果我将阈值设置为 0.36,并将所有高于 0.36 的值设置为 1,其余设置为 0,则神经网络输出每次都符合预期。 我的问题是:是否需要对网络的输出应用阈值才能生成像我这样的预期输出?

【问题讨论】:

  • 嗨,您不应该对网络的输出应用阈值。您必须随机设置所有权重(包括每个神经元的阈值),然后给它 epochs / 假定结果并计算错误(假定结果和网络输出之间的差异)然后从这个错误中您必须使用 backpropagation (en.wikipedia.org/wiki/Backpropagation) 调整网络的每个权重。在某个时期之后,每个神经元都会调整其权重(包括阈值)以从给定的输入中给出正确的输出。
  • 抱歉重复评论,没有足够的空间,但这里有一个完整的数学反向传播演示,您应该可以通过代码重现:mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example

标签: neural-network threshold perceptron


【解决方案1】:

阈值不是必需的,但可以帮助更好地分类,例如。

在你的情况下,也许你可以为 0 设置阈值 0.1,为 1 设置 0.9。当你的输出低于 0.1 时,我们可以认为它是 0,如果输出高于 0.9,那么它是 1 .

因此,将阈值设置为 0.36 只是因为 那个 测试示例可以工作,这是一个非常糟糕 的想法。 因为 0.36 与我们想​​要的输出 1 相差甚远。而且因为它可能(将)不适用于您的所有测试数据。

您应该考虑代码的问题。

这不是最初的问题,但这里有一些想法:
1. 看看你在每个 eopch 的训练准确度。如果它学习缓慢,请提高您的学习率,并可能在几个 epoch 后降低它。
2. 如果准确率没有变化,请查看您的 Back probagation 算法
3. 查看您的数据集并确保输入和输出正确
4. 确保您的权重是随机初始化的
5. AND门可以用线性NN求解,没有隐藏层。 Myabe 尝试移除隐藏层?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 2020-02-18
    • 2012-09-06
    • 1970-01-01
    • 2010-10-13
    • 2014-07-05
    • 1970-01-01
    相关资源
    最近更新 更多