在subtract Softmax,Python中遇到无效值

2024-10-04 11:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个数字稳定版本的softmax:

def softmax(arr):
    print(arr)
    expArr=np.exp(arr-np.max(arr))
    print(expArr)
    return expArr/np.sum(expArr)

它被用作:

^{pr2}$

这个函数叫做它手术:在

for j in range(len(x)):
    ....
    network = feedforward(x[j],weights)
    ....

不过,对于一些数组序列,我得到警告:-在

RuntimeWarning: invalid value encountered in subtract
  expArr=np.exp(arr-np.max(arr))

输入(和输出)在警告之前到达函数是:-在

input
[-1.36678160e+211 -1.97916134e+206 -5.44472726e+204 -5.47948095e+276
 -6.30134248e+251 -4.04707279e+210  7.72371508e+204  1.34861349e+268
  5.47948093e+276  1.06699784e+206]
output
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
input
[-7.06701455e+257  1.47067222e+250              inf             -inf
 -1.13669521e+298 -6.54589076e+254  8.22221348e+250              inf
             -inf -5.44761594e+251]
digit.py:22: RuntimeWarning: invalid value encountered in subtract
  expArr=np.exp(arr-np.max(arr))
output
[ 0.  0. nan  0.  0.  0.  0. nan  0.  0.]
input
[nan nan nan nan nan nan nan nan nan nan]
output
[nan nan nan nan nan nan nan nan nan nan]

我想知道,即使我通过引入np.max(arr)项稳定了softmax函数,为什么我仍然会遇到这个错误,以及如何修复它?谢谢!在

另外,我还使用了scipy.special中给出的softmax函数,但最后还是得到了相同的警告。在


Tags: 函数in警告inputoutputnpnanmax