2016-03-26 2 views
4

Я написал функцию регрессии softmax def softmax_1(x), которая по существу принимает в матрице m x n, выражает матрицу, затем суммирует экспоненты каждого столбца.np.sum для оси строк, не работающей в Numpy

x = np.arange(-2.0, 6.0, 0.1) 
scores = np.vstack([x, np.ones_like(x), 0.2 * np.ones_like(x)]) 
#scores shape is (3, 80) 

def softmax_1(x): 
    """Compute softmax values for each sets of scores in x.""" 
    return(np.exp(x)/np.sum(np.exp(x),axis=0)) 

Преобразование его в DataFrame я должен перенести

DF_activation_1 = pd.DataFrame(softmax_1(scores).T,index=x,columns=["x","1.0","0.2"]) 

Так что я хотел бы попробовать и сделать версию SoftMax функции, которая принимает в транспонированной версии и вычисляет SoftMax функцию

scores_T = scores.T 
#scores_T shape is (80,3) 

def softmax_2(y): 
    return(np.exp(y/np.sum(np.exp(y),axis=1))) 

DF_activation_2 = pd.DataFrame(softmax_2(scores_T),index=x,columns=["x","1.0","0.2"]) 

Тогда я получаю эту ошибку:

Traceback (most recent call last): 
    File "softmax.py", line 22, in <module> 
    DF_activation_2 = pd.DataFrame(softmax_2(scores_T),index=x,columns=["x","1.0","0.2"]) 
    File "softmax.py", line 18, in softmax_2 
    return(np.exp(y/np.sum(np.exp(y),axis=1))) 
ValueError: operands could not be broadcast together with shapes (80,3) (80,) 

Почему это не работает, когда я транспонирую и переключаю ось в методе np.sum?

ответ

4

Изменить

np.exp(y/np.sum(np.exp(y),axis=1)) 

в

np.exp(y)/np.sum(np.exp(y),axis=1, keepdims=True) 

Это будет означать, что np.sum будет возвращать массив формы (80, 1), а не (80,), который будет транслировать правильно для разделения. Также обратите внимание на поправку на закрытие кронштейна.

+0

Эй, спасибо за быстрый ответ, почему мои строки не суммируются до 1 после транспонирования? Первая строка 'DF_activation_1' равна' 0.033211 0.667060 0.299729', а первая строка 'DF_activation_2' равна' 0.612139 1.278129 1.050304' –

+0

Я буду возиться с ней, все еще суммируются до> 1. Я сообщу вам, когда я ее буду считать вне. –

+1

Перемещенный комментарий о скобках случайно отправлен как отдельный ответ ниже в ответе выше. – YXD

 Смежные вопросы

  • Нет связанных вопросов^_^