scipy.special.

softmax#

scipy.special.softmax(x, axis=None)[Quelle]#

Berechnet die Softmax-Funktion.

Die Softmax-Funktion transformiert jedes Element einer Sammlung, indem sie das Exponential jedes Elements durch die Summe der Exponenziale aller Elemente teilt. Das heißt, wenn x ein eindimensionales Numpy-Array ist

softmax(x) = np.exp(x)/sum(np.exp(x))
Parameter:
xarray_like

Eingabearray.

axisint oder Tupel von ints, optional

Achse, entlang der die Werte berechnet werden. Standard ist None, und Softmax wird über das gesamte Array x berechnet.

Rückgabe:
sndarray

Ein Array mit der gleichen Form wie x. Die Summe des Ergebnisses entlang der angegebenen Achse ist 1.

Hinweise

Die Formel für die Softmax-Funktion \(\sigma(x)\) für einen Vektor \(x = \{x_0, x_1, ..., x_{n-1}\}\) lautet

\[\sigma(x)_j = \frac{e^{x_j}}{\sum_k e^{x_k}}\]

Die Funktion softmax ist der Gradient von logsumexp.

Die Implementierung verwendet Verschiebungen, um Überläufe zu vermeiden. Weitere Details finden Sie unter [1].

Hinzugefügt in Version 1.2.0.

softmax unterstützt experimentell Python Array API Standard-kompatible Backends zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie die Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy-, PyTorch-, JAX- oder Dask-Arrays als Array-Argumente bereitstellen. Die folgenden Kombinationen aus Backend und Gerät (oder anderer Fähigkeit) werden unterstützt.

Bibliothek

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

Dask

n/a

Siehe Unterstützung für den Array API Standard für weitere Informationen.

Referenzen

[1]

P. Blanchard, D.J. Higham, N.J. Higham, „Accurately computing the log-sum-exp and softmax functions“, IMA Journal of Numerical Analysis, Vol.41(4), DOI:10.1093/imanum/draa038.

Beispiele

>>> import numpy as np
>>> from scipy.special import softmax
>>> np.set_printoptions(precision=5)
>>> x = np.array([[1, 0.5, 0.2, 3],
...               [1,  -1,   7, 3],
...               [2,  12,  13, 3]])
...

Berechnet die Softmax-Transformation über das gesamte Array.

>>> m = softmax(x)
>>> m
array([[  4.48309e-06,   2.71913e-06,   2.01438e-06,   3.31258e-05],
       [  4.48309e-06,   6.06720e-07,   1.80861e-03,   3.31258e-05],
       [  1.21863e-05,   2.68421e-01,   7.29644e-01,   3.31258e-05]])
>>> m.sum()
1.0

Berechnet die Softmax-Transformation entlang der ersten Achse (d.h. der Spalten).

>>> m = softmax(x, axis=0)
>>> m
array([[  2.11942e-01,   1.01300e-05,   2.75394e-06,   3.33333e-01],
       [  2.11942e-01,   2.26030e-06,   2.47262e-03,   3.33333e-01],
       [  5.76117e-01,   9.99988e-01,   9.97525e-01,   3.33333e-01]])
>>> m.sum(axis=0)
array([ 1.,  1.,  1.,  1.])

Berechnet die Softmax-Transformation entlang der zweiten Achse (d.h. der Zeilen).

>>> m = softmax(x, axis=1)
>>> m
array([[  1.05877e-01,   6.42177e-02,   4.75736e-02,   7.82332e-01],
       [  2.42746e-03,   3.28521e-04,   9.79307e-01,   1.79366e-02],
       [  1.22094e-05,   2.68929e-01,   7.31025e-01,   3.31885e-05]])
>>> m.sum(axis=1)
array([ 1.,  1.,  1.])