Ich bin neu in Neuronalen Netzwerken. Ich habe versucht, einfache 4-0-2 MLP zu schreiben und lernen Back-Propagation-Algorithmus in der Praxis. Aber meine Rückausbreitung divergiert immer und die Ausgabe ist immer [1,1]. Ich suchte nach der möglichen Ursache, aber weder die Lernrate auf eine relativ kleine Zahl (0,001) einzustellen, noch das Vorzeichen des Deltagewichts zu ändern, konnte das Problem lösen.Zurück Propagation Algorithmus funktioniert nicht richtig
-Code für Backpropagationalgorithmus:
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]
und trainingSamples
ist ein Tupel von Tupeln von Arrays: (([1,1,1,1],[1,0]), ([0,0,0,0],[0,1]),([1,0,0,0],[0,1]), ([1,0,1,0],[1,0]))
Hier ist der Vorwärts-Pass-Code:
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
Können Sie zeigen, wie Sie die Ausgabe berechnen? Vielleicht stimmt auch etwas mit dem Forward nicht? (Ich will dich nicht beleidigen, aber je mehr wir ausschließen können, desto besser denke ich). –
@david_l: vielleicht besser [bearbeiten] (http://stackoverflow.com/posts/41837181/edit) es in Ihrer Frage. –
@ WillemVanOnsem, done –