【问题标题】:Invalid value encountered in subtract - Softmax, Python减法中遇到无效值 - Softmax,Python
【发布时间】:2019-03-17 11:08:17
【问题描述】:

我正在使用 softmax 的数值稳定版本:-

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

它被用作:-

def feedforward(x_i,W):
    ...
    outputLayer = softmax(np.dot(network[-1],W[-1]))
    ...

并且这个函数被迭代调用:-

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 函数,但还是得到了同样的警告。

【问题讨论】:

  • 也许您需要检查输入数组中的“nan”。为什么它包含“nan”?这可以接受吗??
  • @mnabil 之前的输出被用作输入,经过一些修改。由于之前的输出有inf,它给了我nan
  • @mnabil 我添加了更多信息。我希望它现在更清楚

标签: python scipy softmax


【解决方案1】:

输入数组中的“inf”使得除法为

"<non inf number>/inf"

给出“0” 和

"inf/inf" 

给出“nan”

你应该从输入数组中消除“inf”。

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 2015-05-01
    • 2016-09-26
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多