NumPy Softmax in Python
Questo tutorial spiegherà come implementare la funzione softmax utilizzando la libreria NumPy in Python. La funzione softmax è una forma multidimensionale generalizzata della funzione logistica. Viene utilizzato nella regressione logistica multinomiale e come funzione di attivazione nelle reti neurali artificiali.
La funzione softmax normalizza tutti gli elementi dell’array nell’intervallo (0,1)
in modo che possano essere trattati come probabilità. La funzione softmax è definita dalla seguente formula:
Esamineremo i metodi per implementare la funzione softmax su array unidimensionali e bidimensionali in Python utilizzando la libreria NumPy.
Funzione NumPy Softmax per array 1D in Python
Supponiamo di dover definire una funzione softmax che accetta un array 1D come input e restituisce l’array normalizzato richiesto.
Il problema comune che può verificarsi durante l’applicazione di softmax è il problema di stabilità numerica, il che significa che ∑j e^(z_j)
può diventare molto grande a causa dell’errore esponenziale e di overflow che può verificarsi. Questo errore di overflow può essere risolto sottraendo ogni valore dell’array con il suo valore massimo.
Gli esempi di codice seguenti dimostrano l’implementazione originale della funzione softmax e l’implementazione con la sottrazione massima utilizzando la libreria NumPy in Python.
- Softmax originale:
import numpy as np
def softmax(x):
f_x = np.exp(x) / np.sum(np.exp(x))
return f_x
- Softmax numericamente stabile:
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
Funzione NumPy Softmax per array 2D in Python
La funzione softmax per un array 2D eseguirà la trasformazione softmax lungo le righe, il che significa che il massimo e la somma verranno calcolati lungo le righe. Nel caso dell’array 1D, non dovevamo preoccuparci di queste cose; dovevamo solo applicare tutte le operazioni sull’array completo.
L’esempio di codice seguente mostra come la trasformazione softmax verrà trasformata su un input di array 2D utilizzando la libreria NumPy in 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
Supponiamo di dover eseguire la trasformazione softmax lungo le colonne dell’array 2D; possiamo farlo semplicemente prendendo il trasporto di input e output del metodo softmax()
descritto sopra.
Codice di esempio:
softmax(x.T).T