NumPy Softmax en Python

Muhammad Waiz Khan 15 février 2024
  1. Fonction NumPy Softmax pour les tableaux 1D en Python
  2. Fonction NumPy Softmax pour les tableaux 2D en Python
NumPy Softmax en Python

Ce tutoriel explique comment implémenter la fonction softmax en utilisant la bibliothèque NumPy en Python. La fonction softmax est une forme multidimensionnelle généralisée de la fonction logistique. Elle est utilisée dans la régression logistique multinomiale et comme fonction d’activation dans les réseaux neuronaux artificiels.

La fonction softmax normalise tous les éléments du tableau dans l’intervalle (0,1) afin qu’ils puissent être traités comme des probabilités. La fonction softmax est définie par la formule suivante :

formule softmax

Nous examinerons les méthodes pour implémenter la fonction softmax sur des tableaux à une et deux dimensions en Python en utilisant la bibliothèque NumPy.

Fonction NumPy Softmax pour les tableaux 1D en Python

Supposons que nous devions définir une fonction softmax qui prend un tableau 1D comme entrée et renvoie le tableau normalisé requis.

Le problème commun qui peut survenir lors de l’application de softmax est le problème de stabilité numérique, ce qui signifie que la fonction ∑j e^(z_j) peut devenir très grande en raison de l’erreur exponentielle et de débordement qui peut se produire. Cette erreur de débordement peut être résolue en soustrayant chaque valeur du tableau avec sa valeur max.

Les exemples de code ci-dessous démontrent l’implémentation originale de la fonction softmax et l’implémentation avec soustraction max en utilisant la bibliothèque NumPy en Python.

  • Softmax d’origine :
import numpy as np


def softmax(x):

    f_x = np.exp(x) / np.sum(np.exp(x))
    return f_x
  • Softmax numériquement stable :
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

Fonction NumPy Softmax pour les tableaux 2D en Python

La fonction softmax pour un tableau 2D effectuera la transformation softmax le long des lignes, ce qui signifie que le max et la somme seront calculés le long des lignes. Dans le cas du tableau 1D, nous n’avons pas eu à nous préoccuper de ces choses ; nous avons juste eu à appliquer toutes les opérations sur le tableau complet.

L’exemple de code ci-dessous montre comment la transformation softmax sera transformée sur un tableau 2D en utilisant la bibliothèque NumPy en Python.

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

Supposons que nous devions effectuer la transformation softmax le long des colonnes d’un tableau 2D ; nous pouvons le faire en prenant simplement le transport de l’entrée et de la sortie de la méthode softmax() décrite ci-dessus.

Exemple de code :

softmax(x.T).T