大家好,我有下面的形状矩阵[5,3],我想得到softmax函数。
array([[340. , 59.33333333, 348.11111111],
[292.5 , 46.5 , 297.875 ],
[301.14285714, 48.28571429, 307.71428571],
[307. , 50. , 319.28571429],
[307.77777778, 48.44444444, 313.44444444]])
上面矩阵的名称是e_l1,我尝试过这个代码,得到了一个矩阵,但当我尝试对每一行求和时,结果不是1,所以这意味着我的结果是错误的。
e= np.exp(e_l1- np.max(e_l1))
S= np.sum(e,axis=0)
P= e/S
结果我得到了这个:
[[1.00000000e+00 9.99874329e-01 1.00000000e+00]
[2.34969834e-21 2.66992811e-06 1.52312011e-22]
[1.33216272e-17 1.59230195e-05 2.85681188e-18]
[4.65888615e-15 8.84158760e-05 3.02892988e-13]
[1.01406710e-14 1.86621235e-05 8.79949929e-16]]
并且作为行的总和的结果:
[2.99987433e+00 2.66992811e-06 1.59230195e-05 8.84158763e-05
1.86621235e-05]
有人知道这里发生了什么吗?我认为我使用的公式是正确的
似乎你只是用错了求和的轴,因为你在计算每一行的概率,你需要用同一行中所有元素的和除以该行中的每个元素
e = np.exp(e_l1- np.max(e_l1))
S = np.sum(e,axis=1)
P = e/np.expand_dims(S, 1)
print(P.sum(axis=1))