【问题标题】:Neural Network Output Grouping 0.5?神经网络输出分组 0.5?
【发布时间】:2011-02-05 15:07:57
【问题描述】:

我尝试编写一个神经网络系统,但即使运行简单的 AND/OR/NOR 类型的问题,输出似乎也集中在 0.5(偏差为 -1)和 0.7(偏差为 1)左右。 它看起来并不完全“错误”...... AND 模式中的 1,1 确实看起来比其他模式更高,而 OR 中的 0,0 看起来更低,但它们仍然全部分组,因此值得商榷。

我想知道 a) 我是否犯了一些明显的错误或 b) 是否有任何关于调试神经网络的建议......因为你不能总是准确地追溯答案的来源......

谢谢!

迈克

【问题讨论】:

  • 问这个可能有点晚了,但是我应该在我的“输出”上看到更多的范围,对吧?它不应该是……将 0.56 舍入为 1 并将 0.49 舍入为 0?每次我检查各个公式时,一切都很好,所以我认为这是实现而不是算法:)更烦人:)
  • 您的 sigmoid 函数仅负责对值进行归一化,并且仅当它们在您的准确度阈值内时才应四舍五入。最初只是尝试产生一个非常小的均方根误差,当该误差低于阈值时,您才会将实例标记为正确分类。
  • 我一直在玩它...我认为算法是正确的。 DeltaWeightHiddenToOutput ( getLearningRate() * dHiddenValues[j] * dErrorGradients[1][i] ) + ( dWeightDelta[1][j][i] * getMomentum() ); ErrorGradientForOutput = inline double CalculateErrorGradient ( double dExpected, double dOutput ) { return dOutput * ( 1 - dOutput) * ( dExpected - dOutput ); } ErrorHiddenLayers for ( unsigned int i = 0; i
  • 它似乎适用于线性可分离的问题......最终......并且需要超过 15000 个 epoch 来学习......但对于 XOR 它似乎并没有接近......跨度>

标签: neural-network


【解决方案1】:

对于 a) 如果没有更多信息就无法判断。

对于 b) 我发现的最佳方法是为我的网络架构的小型测试版本提供一组预先计算的向量和权重,并使用一些调试代码将网络状态转储到 csv 文件中,所以我可以在 Excel 中查看它。

对于单个模式和已知的网络初始状态,您的网络的前向(和后向)通道应该完全可以手动计算,因此最好有一个候选模式,或者如果您可以忍受的话,最好有几个手动,为您的测试完全枚举。实际上并没有听起来那么糟糕。

这样做还有一个额外的好处,它可以加强您对算法工作原理的理解,并让您从不同的角度再次检查您的实现。

祝你好运。

附:无耻插入反向传播博客条目here...

【讨论】:

    【解决方案2】:

    我回答了一个类似的问题,并发布了一些您可以测试的值:

    Artificial neural networks benchmark

    使用这些值来测试您的神经网络。即使您使用不同的语言,您的输出也应该非常接近地匹配这些值......您应该能够匹配小数点后至少 6 位数字而不会出现问题。

    【讨论】:

    • 请原谅我的无知,但我的体重值不会因...动量(我使用的是 0.1)和我使用 sigmoid 作为激活等因素而有所不同截图,sigmoid被取消了?
    • @Mike,实际上屏幕截图只是为了演示网络的节点架构......我在描述中指定了权重和值,当然我使用了一个 sigmoid 函数。如果您从节点中的相同权重和值开始并使用反向传播,则结果之间应该没有差异。
    猜你喜欢
    • 2015-02-23
    • 2018-11-04
    • 1970-01-01
    • 2017-11-21
    • 2012-01-16
    • 2020-03-15
    相关资源
    最近更新 更多