NumPy Softmax in Python
In diesem Tutorial wird erklärt, wie man die Softmax-Funktion mit Hilfe der NumPy-Bibliothek in Python implementiert. Die softmax-Funktion ist eine verallgemeinerte mehrdimensionale Form der logistischen Funktion. Sie wird in der multinomialen logistischen Regression und als Aktivierungsfunktion in künstlichen neuronalen Netzen verwendet.
Die softmax-Funktion normalisiert alle Elemente des Arrays im Intervall (0,1)
, so dass sie als Wahrscheinlichkeiten behandelt werden können. Die Softmax-Funktion ist durch die folgende Formel definiert:
Wir werden uns die Methoden zur Implementierung der Softmax-Funktion auf ein- und zweidimensionale Arrays in Python unter Verwendung der NumPy-Bibliothek ansehen.
NumPy Softmax-Funktion für 1D-Arrays in Python
Angenommen, wir müssen eine Softmax-Funktion definieren, die ein 1D-Array als Eingabe nimmt und das gewünschte normalisierte Array zurückgibt.
Ein häufiges Problem, das bei der Anwendung von Softmax auftreten kann, ist das numerische Stabilitätsproblem, d. h., dass ∑j e^(z_j)
sehr groß werden kann, weil ein Exponential- und Überlauffehler auftreten kann. Dieser Überlauffehler kann gelöst werden, indem jeder Wert des Arrays mit seinem Maximalwert subtrahiert wird.
Die folgenden Code-Beispiele zeigen die ursprüngliche Implementierung der softmax-Funktion und die Implementierung mit Max-Subtraktion unter Verwendung der NumPy-Bibliothek in Python.
- Original softmax:
import numpy as np
def softmax(x):
f_x = np.exp(x) / np.sum(np.exp(x))
return f_x
- Numerisch stabiles softmax:
import numpy as np
def softmax(x):
y = np.exp(x - np.max(x))
f_x = y / np.sum(np.exp(x))
return f_x
NumPy-Softmax-Funktion für 2D-Arrays in Python
Die softmax-Funktion für ein 2D-Array führt die softmax-Transformation entlang der Zeilen durch, d. h. das max und die Summe werden entlang der Zeilen berechnet. Im Fall des 1D-Arrays mussten wir uns um diese Dinge nicht kümmern; wir mussten nur alle Operationen auf das komplette Array anwenden.
Das folgende Code-Beispiel demonstriert, wie die Softmax-Transformation auf ein 2D-Array-Eingangssignal mit Hilfe der NumPy-Bibliothek in Python umgesetzt wird.
import numpy as np
def softmax(x):
max = np.max(
x, axis=1, keepdims=True
) # returns max of each row and keeps same dims
e_x = np.exp(x - max) # subtracts each row with its max value
sum = np.sum(
e_x, axis=1, keepdims=True
) # returns sum of each row and keeps same dims
f_x = e_x / sum
return f_x
Angenommen, wir müssen eine Softmax-Transformation entlang der Spalten eines 2D-Arrays durchführen; wir können dies tun, indem wir einfach den Transport von Eingabe und Ausgabe der oben beschriebenen Methode softmax()
übernehmen.
Beispiel-Code:
softmax(x.T).T