NumPy Softmax in Python

Muhammad Waiz Khan 30 Januar 2023
  1. NumPy Softmax-Funktion für 1D-Arrays in Python
  2. NumPy-Softmax-Funktion für 2D-Arrays in Python
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:

Softmax-Formel

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