softmax#
- scipy.special.softmax(x, ось=None)[источник]#
Вычислить функцию softmax.
Функция softmax преобразует каждый элемент коллекции, вычисляя экспоненту каждого элемента, делённую на сумму экспонент всех элементов. То есть, если x является одномерным массивом numpy:
softmax(x) = np.exp(x)/sum(np.exp(x))
- Параметры:
- xarray_like
Входной массив.
- осьint или кортеж ints, опционально
Ось для вычисления значений. По умолчанию None, и softmax будет вычислен по всему массиву x.
- Возвращает:
- sndarray
Массив той же формы, что и x. Результат будет суммироваться до 1 вдоль указанной оси.
Примечания
Формула для функции softmax \(\sigma(x)\) для вектора \(x = \{x_0, x_1, ..., x_{n-1}\}\) является
\[\sigma(x)_j = \frac{e^{x_j}}{\sum_k e^{x_k}}\]The
softmaxфункция является градиентомlogsumexp.В реализации используется сдвиг для избежания переполнения. См. [1] для получения дополнительной информации.
Добавлено в версии 1.2.0.
softmaxимеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окруженияSCIPY_ARRAY_API=1и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).Библиотека
CPU
GPU
NumPy
✅
н/д
CuPy
н/д
✅
PyTorch
✅
✅
JAX
✅
✅
Dask
✅
н/д
См. Поддержка стандарта array API для получения дополнительной информации.
Ссылки
[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.
Примеры
>>> 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]]) ...
Вычислить softmax преобразование для всего массива.
>>> 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
Вычислите преобразование softmax вдоль первой оси (т.е., столбцов).
>>> 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.])
Вычислить преобразование softmax вдоль второй оси (т.е. строк).
>>> 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.])