NumPy Softmax en Python
- Fonction NumPy Softmax pour les tableaux 1D en Python
- Fonction NumPy Softmax pour les tableaux 2D 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 :
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