[PYTHON] Aktivieren Sie Aktivierungsfunktionen nebeneinander

(Zusatz)

Die Erklärung des Codes wurde hinzugefügt.

Ich war ein Anfänger. Obwohl ich selbst gelernt habe, habe ich es verstanden. Als ich gerade anfing, fügte ich einen Kommentar hinzu, den ich so hören wollte. Ich denke, dieser Artikel wird wahrscheinlich von Anfängern und Fortgeschrittenen gelesen. Anfangs war es schwierig, alleine zu lernen, und manchmal konnte ich es nicht verstehen und war wahrscheinlich frustriert. Ich schrieb, dass ich in einem solchen Fall sogar ein bisschen helfen könnte.

1. Zuallererst

Eine Aktivierungsfunktion wurde im Deep Learning vorgeschlagen und wird noch erforscht. Ich habe versucht, jede Seite nebeneinander anzuzeigen. Ich benutze oft ausschließlich ReLU, aber als ich darüber nachdachte, dachte ich, ich könnte mich nicht genau daran erinnern, also versuchte ich es aufzulisten.

2. Versuchen Sie, sich auszurichten

Ich habe es mit Jupyter Notebook implementiert. Jede Aktivierungsfunktion kann nebeneinander angezeigt werden.

%matplotlib inline
#Modulimport
import numpy as np
import matplotlib.pyplot as plt

#Grafikeinstellungen
n_cols = 4
n_rows = 2
plt.figure(figsize=(20,8))

#Generiere den Wert von x
x = np.arange(-10, 10, 0.01)

#Liste jeder anzuzeigenden Funktion
activation_function_list = [ 'Indentity', 'Step', 'Sigmoid', 'tanh', 'ReLU', 'Leaky ReLU','Swish', 'Mish']

#Grafikanzeige
def graph(x,y):
    plt.subplot(n_rows, n_cols, i+1)
    plt.grid()
    plt.title(f)
    plt.ylim(-1, 1)
    plt.xlim(-5, 5)
    plt.plot(x,y)
    
#Berechnung jeder Funktion
for i, f in enumerate(activation_function_list):
    #Gleiche Funktion
    if f == 'Indentity':
        y = x
    #Stufenfunktion
    elif f == 'Step':
        y = np.where(x<=0, 0, 1)
    #Sigmoidfunktion
    elif f == 'Sigmoid':
        y = 1./(1. + np.exp(-x))
    #Tanh-Funktion
    elif f == 'tanh':
        y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
    #ReLU-Funktion
    elif f == 'ReLU':
        y = np.maximum(0,x)
    #Undichte ReLU-Funktion
    elif f == 'Leaky ReLU':
        y = np.where(x > 0, x , 0.01 * x)
    #Swish-Funktion
    elif f == 'Swish':
        y = x*1./(1. + np.exp(-x))
    #Mischfunktion
    elif f == 'Mish':
        x_sp = np.log(1+np.exp(x))     #Softplus-Funktion
        y = x * ((np.exp(x_sp ) - np.exp(-x_sp)) / (np.exp(x_sp) + np.exp(-x_sp)))    
        
    #Diagramm erstellen
    graph(x,y)
        
#Zeichnen eines Diagramms
plt.show()

#Grafik speichern
fig.savefig('activation_function_list.png')

3. Ausgabefunktion

Das von matplotlip am Ende des Codes erstellte Diagramm wird als PNG-Datei gespeichert. Im obigen Fall wird diese Datei in demselben Verzeichnis gespeichert, in dem sich die Notebook-Datei befindet. Swish und Mish sind neue Aktivierungsfunktionen.

In Zukunft möchte ich den Leistungsunterschied zwischen diesen Aktivierungsfunktionen überprüfen. activation_function_list.png

Das ist das Ende.

4. Erläutern Sie den obigen Code.

Von hier aus werde ich den oben geschriebenen Code erklären. Ich habe den Kommentar geschrieben, den ich als Anfänger hören wollte. Ich denke, dass es für fortgeschrittene und fortgeschrittene Benutzer nicht ausreicht, aber wenn Sie interessiert sind, schauen Sie bitte.

4-1. Grafikanzeige

%matplotlib inline

Es wird im Notizbuch gezeichnet, indem "% matplotlib inline" geschrieben wird.

4-2. Module importieren

Der folgende Code importiert zwei Module, NumPy und Matplotlib.

#Modulimport
import numpy as np
import matplotlib.pyplot as plt

Lassen Sie uns überprüfen, woher dieses Modul importiert wird. Wenn ich den folgenden Code auf meinem Notebook ausführe


import numpy as np
print(np.__file__)

Ausgabe /Users/username/.pyenv/versions/3.6.2/lib/python3.6/site-packages/numpy/__init__.py

Diese Ausgabe hängt von jeder Umgebung ab. Aus diesem Ausgabeergebnis geht jedoch hervor, dass auf numpy verwiesen wird, das auf dem lokalen PC installiert ist. __init __. py wird im Artikel von @ PYTHONISTA ausführlich beschrieben. Wie schreibe ich Python __init __.py

Da as beim Importieren hinzugefügt wird, können Sie danach mit np auf numpy verweisen.

import numpy
print(numpy.__file__)

Trotzdem können Sie das Gleiche tun.

4-3. Grafikeinstellungen

Hier wird das Diagramm festgelegt, in dem die Aktivierungsfunktionen nebeneinander angezeigt werden. In der unten beschriebenen Nebenhandlung verwende ich die Einstellung, um 4 Diagramme horizontal und 2 vertikal anzuordnen. Die Figur wird mit der durch figsize angegebenen Größe hergestellt.

Die Liste wird am Ende des Codes als PNG-Datei gespeichert, aber das in der Abbildung platzierte Diagramm wird zu einer Datei.

#Grafikeinstellungen
n_cols = 4
n_rows = 2
plt.figure(figsize=(20,8))

4-4. X-Wertgenerierung

#Generieren Sie x-Achsenwerte
x = np.arange(-10, 10, 0.01)

Versuchen wir es hier. スクリーンショット 2020-03-07 22.43.54.png

Wenn Sie die Tasten [Umschalt] + [Tab] drücken, während sich der Cursor in () befindet, werden die Details wie unten gezeigt angezeigt. スクリーンショット 2020-03-07 22.43.15.png

Von hier aus können Sie sehen, welche Parameter die Anordnung als Argument verwendet. Wenn x = np.arange (-10, 10, 0.1) ist, ist Start -10, Stopp ist 10, Schritt ist 0.1 und so weiter. Eine Liste mit Zahlen von -10 bis 10 wird in Schritten von 0,1 zurückgegeben. Lass es uns überprüfen.

print('Liste von x:',x)
print('x Länge:',len(x))
print('Art von x', type(x))

Liste von x: [-10. -9,99 -9,98 ... 9,97 9,98 9,99] Länge von x: 2000 Typ von x <class'numpy.ndarray '> Es wurden 2000 Nummern generiert. Sie können sehen, dass die für stop angegebenen 10 nicht enthalten sind.

4-5 Liste aller anzuzeigenden Funktionen

Hier erstellen wir eine Liste der Funktionen, die wir auflisten möchten.

activation_function_list = [ 'Indentity', 'Step', 'Sigmoid', 'tanh', 'ReLU', 'Leaky ReLU','Swish', 'Mish']

4-6. Grafikanzeige

Dieser Teil definiert die Grafikzeichnungsfunktion. Diese Funktion wird im Prozess von 4-7 aufgerufen, um ein Diagramm zu erstellen. Der i-Teil zeigt die Position des Diagramms beim Anordnen in 4x2. Von oben links nach rechts 1 2 3 4 5 6 7 8 Es wird sein. Ich werde in das dritte Argument von plt.subplot aufgenommen. Dies bedeutet, dass i beim Aufrufen der Diagrammfunktion die Position des Diagramms selbst angibt.

Extrahieren Sie die Namen der Index- und Aktivierungsfunktionen aus der Liste in 4-7.

#Grafikanzeige
def graph(x, y):
    #Der Index beginnt bei 0, aber die Position des Diagramms wird von 1 angegeben
    #Fügen Sie hier 1 und 4 hinzu-Es ruft die in 6 definierte Grafikfunktion auf.
    plt.subplot(n_rows, n_cols, i+1)
    plt.grid()   #Aktivieren Sie Gitterlinien im Diagramm
    plt.title(f)    #Setzen Sie den Funktionsnamen auf den Diagrammtitel
    plt.ylim(-1, 1)    #Geben Sie den anzuzeigenden Bereich der y-Achse an
    plt.xlim(-5, 5)    #Geben Sie den anzuzeigenden x-Achsenbereich an
    plt.plot(x, y)    #Zeichnen Sie die Werte von x und y

4-7 Berechnung jeder Funktion

Es ist ein bisschen lang, also werde ich dem Code einen Kommentar hinzufügen. Die Details jeder Funktion sind zu viel, um sie hier dem Magazin zu widmen, daher werde ich sie in diesem Artikel weglassen.


#Berechnung jeder Funktion
#Verwenden Sie zum Aktivieren die Aufzählungsfunktion_function_Extrahieren von Indizes und Listenwerten aus der Liste.
#i ist der Index und f ist der Funktionsname.
#i wird in der Reihenfolge von 0 eingegeben.
for i, f in enumerate(activation_function_list):
    #Der Wert von y wird basierend auf dem extrahierten Funktionsnamen berechnet.
    #Der Wert von x ist 2,Da es 000 gab, ist der Wert von y auch 2.,000 wurden generiert.
    if f == 'Indentity':    #Gleiche Funktion
        y = x
    elif f == 'Step':    #Stufenfunktion
        y = np.where(x<=0, 0, 1)
    elif f == 'Sigmoid':    #Sigmaid-Funktion
        y = 1./(1. + np.exp(-x))
    elif f == 'tanh':    #Hyperbolische Tangentenfunktion
        y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
    elif f == 'ReLU':    #ReLU-Funktion
        y = np.maximum(0,x)
    elif f == 'Leaky ReLU':    #Undichte ReLU-Funktion
        y = np.where(x > 0, x , 0.01 * x)
    elif f == 'Swish':    #Swish-Funktion
        y = x*1./(1. + np.exp(-x))
    elif f == 'Mish':    #Swish-Funktion
        x_sp = np.log(1+np.exp(x))    #Softplus-Funktion
        y = x * ((np.exp(x_sp ) - np.exp(-x_sp )) / (np.exp(x_sp ) + np.exp(-x_sp )))    
        
    #Zeichnen eines Diagramms
    #Übergeben Sie y, berechnet mit x als Argument der Diagrammfunktion.
    graph(x,y)

Ich benutze die Aufzählungsfunktion, um den Index und den Wert aus der Liste zu erhalten. Sie können sehen, welcher Wert erhalten wird, indem Sie den folgenden Code ausführen

for i, f in enumerate(activation_function_list):
    print('index:', i , 'value:', f)

Ausgabe index: 0 value: Indentity index: 1 value: Step index: 2 value: Sigmoid index: 3 value: tanh index: 4 value: ReLU index: 5 value: Leaky ReLU index: 6 value: Swish index: 7 value: Mish Sie können sehen, dass die Indizes und Werte der Reihe nach abgerufen werden können.

4-8 Zeichnen und Speichern von Grafiken

Das Diagramm wird in den folgenden zwei Zeilen gezeichnet und gespeichert. Die von Ihnen gespeicherte PNG-Datei wird in dem Ordner gespeichert, der Ihre Notebook-Datei enthält.

#Zeichnen eines Diagramms
plt.show()

#Grafik speichern
fig.savefig('activation_function_list.png')

Wenn es Fehler oder Irrtümer gibt, würde ich mich freuen, wenn Sie mich wissen lassen könnten.

Recommended Posts

Aktivieren Sie Aktivierungsfunktionen nebeneinander
Liste der Aktivierungsfunktionen (2020)
Musik, die von rekursiven Funktionen gespielt wird
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras heraus. 7 - Grundlegendes zu Layertypen und Aktivierungsfunktionen -