2010-04-08 85 views
4

我试图写一个神经网络系统,但即使运行简单的AND/OR/NOR类型的问题,输出似乎分组0.5左右(对于-1的偏差)和0.7(对于1的偏差)。 它看起来并不完全是“错误的”...... AND模式中的1,1似乎高于其余,并且OR中的0,0看起来较低,但它们仍然都是分组的,所以它是有争议的。神经网络输出分组0.5?

我想知道a)如果有一些明显的错误,或者b)如果有任何关于调试神经网络的建议......看到你无法总是追踪到答案的来源......

谢谢!

迈克

+0

这可能是一个有点晚了会问,但,我应该在我的“产出”上看到更多的范围吧?它不应该像......将0.56比1和0.49比0?每次我检查个别公式时,它都通过很好,所以我认为它是实现而不是算法:)哪一个更令人讨厌:) – Micheal 2010-04-08 14:24:25

+0

您的sigmoid函数只负责规范化值,并且只有当它们'在您的准确度范围内。最初只是尝试产生非常小的均方根误差,当该误差低于阈值时,只有这样才能将实例标记为正确分类。 – Kiril 2010-04-08 15:21:29

+0

我一直在玩弄很多...我认为算法是正确的。 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 \t为(无符号整数,I = 0; I Micheal 2010-04-08 20:35:49

回答

0

我回答了类似的问题,我发布了一些值,你可以测试针对:

Artificial neural networks benchmark

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

+0

请原谅我的无知,但woudldn't我的体重值会根据像动量(我使用的是0.1)这样的东西而有所不同,并且我在屏幕截图中使用S形图像作为我的激活图形,S计算器被取消选择了吗? – Micheal 2010-04-08 11:56:02

+0

@Mike,其实屏幕截图只是为了演示网络的节点架构......我在描述中指定了权重和值,当然我使用了sigmoid函数。如果从节点中的相同权重和值开始,并且使用backprop,则结果之间应该没有差异。 – Kiril 2010-04-08 15:16:38

2

为a)没有更多的信息是不可能分辨的。

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

您的网络的前向(后向)通道应该可以针对单个模式和已知的网络初始状态进行手动计算,因此如果您可以忍受这种情况,最好有一个候选模式或一对夫妇它手动,完全枚举为您的测试。这听起来并没有那么糟糕。

这样做的好处是增强了您对算法工作原理的理解,并且会从不同的角度再次检查您的实现。

祝你好运。

P.S.在backprop博客条目here ...无耻插头

0

感谢这个页面上的每个人:)我试过这个页面上的一切,这一切似乎都很好。

最后,Simon的页面非常丰富,但Lirik帮助最多:)他的链接将我引向http://www.generation5.org/content/2001/xornet.asp链接。我检查了所有的值,并发现它们......发现......神奇地是,下一次我运行该程序时,它神奇地工作:)(引人注目的是它比我所希望的效率稍低,比我预期的要服用大量多个时期进行的,但它的工作原理,这是最重要的事情:))

所以感谢大家谁回答:)