[PYTHON] [Deep Learning von Grund auf neu] Ich habe versucht, Sigmoid Layer und Relu Layer zu implementieren

Einführung

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.

Implementierung der Sigmoidschicht

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.

Relu Layer Implementierung

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

[Deep Learning von Grund auf neu] Ich habe versucht, Sigmoid Layer und Relu Layer zu implementieren
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
Ich habe versucht, Dropout zu erklären
[Deep Learning von Grund auf neu] Ich habe die Affine-Ebene implementiert
Ich habe versucht, Deep VQE zu implementieren
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 17) Ich habe versucht, DeepConvNet mit Keras zu erstellen
[Deep Learning von Grund auf neu] Ich habe versucht, die Gradientenbestätigung auf leicht verständliche Weise zu erklären.
Ich habe versucht, Deep Learning zu implementieren, das nicht nur mit NumPy tiefgreifend ist
Deep Learning von Grund auf neu ① Kapitel 6 "Lerntechniken"
Deep Learning von Grund auf neu
Ich habe versucht, tief zu lernen
Ich habe versucht, Oba Hanana und Otani Emiri durch tiefes Lernen zu klassifizieren
[Deep Learning von Grund auf neu] Layer-Implementierung von der Softmax-Funktion zum Überkreuzen von Entropiefehlern
[Python] [Verarbeitung natürlicher Sprache] Ich habe Deep Learning ausprobiert (auf Japanisch von Grund auf neu erstellt)
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Ich habe versucht, Cifar10 mit der SONY Deep Learning Library NNabla [Nippon Hurra] zu implementieren.
Ich habe versucht, Hanana Oba und Emiri Otani durch tiefes Lernen zu klassifizieren (Teil 2)
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Künstliche Intelligenz, maschinelles Lernen, tiefes Lernen zu implementieren und zu verstehen
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Deep Learning von Grund auf 1-3 Kapitel
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, StarGAN (1) zu implementieren.
Python vs Ruby "Deep Learning von Grund auf neu" Kapitel 3 Diagramm der Schrittfunktion, Sigmoidfunktion, ReLU-Funktion
Ich habe versucht, Pferderennen vorherzusagen, indem ich alles von der Datenerfassung bis zum tiefen Lernen getan habe
[Deep Learning von Grund auf neu] Implementierung der Momentum-Methode und der AdaGrad-Methode
Ich habe versucht, die Erkennung von Anomalien durch spärliches Strukturlernen zu implementieren
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Tiefes Lernen von Grund auf neu (Kostenberechnung)
Ich habe versucht, eine kontroverse Validierung zu implementieren
Ich habe versucht, mit Theano tief zu lernen
Deep Learning Memo von Grund auf neu gemacht
Ich habe versucht, Realness GAN zu implementieren
Ich habe versucht, Deep Learning mit Spark × Keras × Docker skalierbar zu machen
Ich habe versucht, Spieler- und Fertigkeitsnamen aus Sportartikeln zu extrahieren
[Deep Learning von Grund auf neu] Informationen zu den Ebenen, die für die Implementierung der Backpropagation-Verarbeitung in einem neuronalen Netzwerk erforderlich sind
Verbessertes Lernen, um von null bis tief zu lernen
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 7]
Tiefes Lernen von Grund auf neu (Vorwärtsausbreitung)
Einführung in Deep Learning ~ Falten und Pooling ~
Tiefes Lernen / Tiefes Lernen von Grund auf 2-Versuchen Sie, GRU zu bewegen
Deep Learning / Deep Learning von Grund auf neu Kapitel 6 Memo
Ich habe versucht, PLSA in Python 2 zu implementieren
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 5]
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 6]
Ich habe versucht, ADALINE in Python zu implementieren
Bildausrichtung: von SIFT bis Deep Learning
Ich habe versucht, PPO in Python zu implementieren
Ich habe versucht, CVAE mit PyTorch zu implementieren
"Deep Learning von Grund auf neu" mit Haskell (unvollendet)
Deep Learning / Deep Learning von Grund auf neu Kapitel 7 Memo
[Windows 10] Aufbau einer "Deep Learning from Scratch" -Umgebung
Lernbericht über das Lesen von "Deep Learning von Grund auf neu"
[Deep Learning von Grund auf neu] Über die Optimierung von Hyperparametern
"Deep Learning from Grund" Memo zum Selbststudium (Teil 12) Deep Learning
[Lernnotiz] Deep Learning von Grund auf neu gemacht [~ Kapitel 4]