二维数组的Softmax函数



大家好,我有下面的形状矩阵[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))

最新更新