Реализуйте функцию softmax с массивом numpy - PullRequest
0 голосов
/ 19 мая 2018

Моя текущая функция выглядит следующим образом:

def soft_max(z):
    t = np.exp(z)
    a = np.exp(z) / np.sum(t, axis=1)
    return a

Однако я получаю ошибку: ValueError: operands could not be broadcast together with shapes (20,10) (20,), так как np.sum (t, axis = 1) не является скаляром.

Я хочу получить t / the sum of each row, но я не знаю, как это сделать.

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Вы хотите сделать что-то вроде (см. этот пост)

def softmax(x, axis=None):
    x = x - x.max(axis=axis, keepdims=True)
    y = np.exp(x)
    return y / y.sum(axis=axis, keepdims=True)
0 голосов
/ 03 января 2019

Начиная с версии 1.2.0, scipy включает softmax в качестве специальной функции:

https://scipy.github.io/devdocs/generated/scipy.special.softmax.html

Используйте аргумент axis, чтобы запустить его над строками.

from scipy.special import softmax
softmax(arr, axis=0)
0 голосов
/ 19 мая 2018

предположим, что ваш z является двумерным массивом, попробуйте

def soft_max(z):
    t = np.exp(z)
    a = np.exp(z) / np.sum(t, axis=1).reshape(-1,1)
    return a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...