Dieser Artikel ist eine leicht verständliche Ausgabe von ** Deep Learning von Grund auf neu. Kapitel 6 Fehler-Backpropagation-Methode **. Ich konnte es selbst verstehen, also hoffe ich, dass Sie es bequem lesen können. Ich würde mich auch sehr freuen, wenn Sie sich beim Studium dieses Buches darauf beziehen könnten.
Die Gradientenformel nach der im vorherigen Artikel implementierten Methode zur Fehlerrückübertragung ist sehr kompliziert, sodass die Wahrscheinlichkeit groß ist, dass Fehler auftreten. Die Verarbeitungsgeschwindigkeit ist jedoch extrem hoch, daher muss ich sie verwenden. Daher ist es wichtig zu überprüfen, ob ein Fehler in der Gradientengleichung vorliegt, indem das Fehlerrückausbreitungsverfahren angewendet wird. Dies wird als Gradientenbestätigung bezeichnet, und eine numerische Differentialgradientenformel, die einfach zu erstellen ist und nur wenige Fehler aufweist, wird verwendet, um den Gradienten zu bestätigen.
Obwohl die Verarbeitungsgeschwindigkeit der numerischen Differentialgradientenformel langsam ist, gibt es aufgrund ihrer einfachen Konstruktion nur wenige Fehler. Daher wird durch Gradientenbestätigung der Gradient bestätigt, der aus der Gradientengleichung der numerischen Differenzierung und dem Gradientenfehler erhalten wird, der durch die Gradientengleichung durch das Fehlerrückausbreitungsverfahren erhalten wird.
Jetzt möchte ich es implementieren.
#Fügen Sie der Klassenmethode für neuronale Netze die folgende numerische Differentialgradientengleichung hinzu
def slopeing_grad_net(self,x,t):#Numerische Differentialgradientenformel, um zu bestätigen, ob die Fehlerrückausbreitungsmethode korrekt ist
loss_c = lambda W: self.loss(x, t)
grads_t = {}
grads_t['W1'] = slopeing_grad(loss_c,self.params['W1'])
grads_t['b1'] = slopeing_grad(loss_c,self.params['b1'])
grads_t['W2'] = slopeing_grad(loss_c,self.params['W2'])
grads_t['b2'] = slopeing_grad(loss_c,self.params['b2'])
return grads_t
#Gradientenprüfung
#Stellen Sie eine Mini-Charge aus
x_train, x_test, t_train, t_test = dataset['train_img'], dataset['test_img'], \
dataset['train_label'], dataset['test_label']
x_batch = x_train[:3]
t_batch = t_train[:3]
netwark = LayerNet(input_size = 784, hiden_size = 50, output_size = 10)
#Lösche jeden Farbverlauf
grad_slope = netwark.slopeing_grad_net(x_batch, t_batch)
grad_new = netwark.gradient(x_batch, t_batch)
for key in grad_slope.keys(): #Vergleichen Sie diese Unterschiede
diff = np.average(np.abs(grad_new[key] - grad_slope[key]))
print(key + ':' + str(diff))
W1:0.03976913034251971
b1:0.0008997051177847986
W2:0.3926011094391389
b2:0.04117287920452093
Überprüfen Sie den Durchschnitt der Gradientenfehler mit einem Code wie dem obigen, um festzustellen, ob die Fehler innerhalb des Bereichs liegen.
Recommended Posts