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.
class Sigmoid: #Schichtimplementierung der Sigmoidfunktion
def __init__(self):
self.out = None #Die Rückausbreitungsverarbeitung der Sigmoidfunktion erfordert das Ausgangssignal der Vorwärtsausbreitungsverarbeitung
def forward(self, x):
out = 1 / (1 + np.log(-x))
self.out = out #Ausgabespeicher für Weiterleitungsausbreitung
return out
def backward(self, dout):
dx = dout * self.out * (1 - self.out) #Verarbeitung, um die Ausbreitung der Sigmoidfunktion zurückzugewinnen
return dx
Vorwärtsausbreitungsprozesse gemäß der Formel der Sigmoidfunktion und Rückgabe mit Rückgabe. Da das Ergebnis des Vorwärtsausbreitungsprozesses jedoch im Rückwärtsausbreitungsprozess verwendet wird, wird es in der Instanzvariablen gespeichert.
Im Rückausbreitungsprozess wäre es ziemlich kompliziert, wenn es normal wäre, daher verwenden wir hier eine vereinfachte Formel, um die Differenzierung zu finden. Ermitteln Sie das Differential des Eingabewerts der Sigmoidschicht anhand des vorherigen Differentials und des Ergebnisses des in der Instanzvariablen gespeicherten Vorwärtsausbreitungsprozesses.
class Relu: #Schichtimplementierung der Relu-Funktion
def __init__(self):
self.mask = None #Wenn das Eingangssignal unter 0 wahr und größer als 0 ist, wird das Array False eingegeben.
def forward(self, x):
self.mask = (x <= 0)
out = x.copy()
out[self.mask] = 0 #Stellen Sie das Eingangssignal unter 0 auf 0
return out
def backward(self, dout):
dout[self.mask] = 0 #Wenn die Vorwärtsausbreitung 0 ist, ist auch die Rückwärtsausbreitung 0, setzen Sie sie hier also auf 0.
dx = dout #Andere erben die bisherige Differenzierung
return dx
Im Vorwärtsausbreitungsprozess werden zum Implementieren ohne Verwendung von if zunächst alle Eingabewerte, die 0 nicht überschreiten, auf True und diejenigen, die 0 überschreiten, auf False gesetzt und in der Instanzvariablen gespeichert. Dies wird später verwendet.
Kopieren Sie als Nächstes das Array mit den Eingabewerten und konvertieren Sie alle zuvor gespeicherten True- und False-Arrays in 0. Und geben Sie es mit zurück.
Beim Rückverbreitungsprozess wird alles True unter Verwendung der im Vorwärtsverbreitungsprozess gespeicherten Arrays True und False in 0 konvertiert. Wenn die Vorwärtsausbreitung 0 ist, ist die Rückwärtsausbreitung ebenfalls 0.
Danach erbt es die vorherige Differenzierung und gibt sie mit return zurück.
Recommended Posts