无论参数如何,反向传播总是将网络推向相同的输出

问题描述 投票:0回答:0

我一直致力于将反向传播添加到我前一段时间编写的神经网络代码中,在添加并三次检查所有数学之后,我得出的结论是它不起作用。网络总是输出相同的东西,很少关心输入是什么。 代码可以在这里看到

因此,为了详细说明正在发生的事情,每当我将增量添加到权重/偏差时,网络总是最终达到像

Correct: 1, 0, Predicted: 0.996989, 0.953245
这样的输出。即使在相反的输入情况下也输出相同的两个高数。所以我检查了我的数学(下面的记事本可见)并且结果正确,减少了以下运行中的错误。

w1 .9 b1 .3 w2 1.3 b2 0.1

(如果 i1 > 2,则正确输出为 1,否则为 0) i1 = 输入, a = (w * layerinput) + b, z = sigmoid(a), e = (correct - output)^2

i1 = 3 a1 = 3 z1 = .952

a2 = 1.338 z2 = .7922

e = .0431

z2/e = -.7491 a2/z2 = 0.2179

w2/e = .2074 b2/e = .2179

z1/a2 = .28327 a1/z1 = 0.24505

w1/e = .73515 b1/e = .24505

--调整后(epsilon 为 .1)--

w1 .973515 b1 .324505 w2 1.32074 b2 0.12179

i1 = 3 a1 = 3.24505 z1 = 0.962494833445

a2 = 1.3929954263241493 z2 = 0.801070015356

e = .039601

使用简化测试(如果输入 > 2 则输出 = 1 否则输出 = 0)和网络我测试了代码,它在我的数学检查使用的相同输入下工作正常但是当我给它一个差异输入时它仍然有正增量(并提高了它的输出),所以我假设这是我的代码的问题。这就是我寻求帮助的地方,我已经多次查看我的代码并且无法找到问题的根源。

c++ neural-network backpropagation
© www.soinside.com 2019 - 2024. All rights reserved.