我是新手,对神经网络不太熟悉。我试图编写一个简单的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