python - 反向传播算法无法正常工作

标签 python neural-network backpropagation

我是神经网络的新手。我正在尝试编写简单的 4-0-2 MLP 并在实践中学习反向传播算法。但是我的反向传播总是发散,输出总是 [1,1]。我搜索了可能的原因,但将学习率设置为非常小的数字(0.001)或更改增量权重的符号都不能解决问题。

反向传播算法代码:

def backward(self,trainingSamples):
    for i in range(len(trainingSamples)):
        curr_sample=trainingSamples[i]
        self.input=curr_sample[0]
        self.forward()
        print("output is "+str(self.output))
        curr_des_out=curr_sample[1]
        for i in range(len(self.outputs)):
            error=curr_des_out[i]-self.outputs[i].output
            der_act=self.outputs[i].activate(deriv=True)
            local_gradient=der_act*error
            for j in range(len(self.input)):
                self.weights[j][i]-=self.learning_rate*local_gradient*self.input[j]

trainingSamples是数组元组的元组:( ([1,1,1,1],[1,0]), ([0,0,0, 0],[0,1]),([1,0,0,0],[0,1]), ([1,0,1,0],[1,0]) )

这是前向密码:

def forward(self):
    for i in range(len(self.outputs)):
        for j in range(len(self.input)):
            self.outputs[i].input+=self.input[j]*self.weights[j][i]
        self.outputs[i].activate()
        self.output[i]=self.outputs[i].output
    return self.output

最佳答案

虽然我看不到你的代码的完整实现(比如 .activate() 等。我想我知道你是如何实现它们的。鉴于你已经正确实现了它们,我明白了您的代码有一个问题会清楚地显示出分歧。

问题 - 或者至少是其中一个问题 - 似乎是您没有重置神经元的输入(树突):

def forward(self):
    for i in range(len(self.outputs)):
        <b>self.outputs[i].input = 0</b>
        for j in range(len(self.input)):
            self.outputs[i].input+=self.input[j]*self.weights[j][i]
        self.outputs[i].activate()
        self.output[i]=self.outputs[i].output
    return self.output

因为您不断增加输入,所以我怀疑您最终确实会得到输出 [1,1],因为 sigmoid 函数随着其输入变为无穷大而变为 1。

关于python - 反向传播算法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41837181/

相关文章:

machine-learning - Batchnorm 中的反向传播更新错误

python - 在 itertools 的 groupby 结果上调用 roundrobin

python - 使用 python 多处理时,mysql 得到不同的结果

python删除以 '\u...'开头的单词

algorithm - 用于威胁分析的神经网络

python - 在 Python 中进化的人工智能

python - Clear 和 exit_fullscreen 似乎不起作用

machine-learning - 使用负采样实现 word2vec

python - 神经网络反向传播算法在 Python 中不起作用