我有一个2d numpy数组,我想使用我的函数sigmoid(x),它是:
def sigmoid(x):
return 1 / (1 + np.exp(-x))
我的问题是我的输入太大了3000,我得到这个警告:
RuntimeWarning: overflow encountered in exp
return 1 / (1 + np.exp(-x/8.))
我试图将值分配给特定数字的输入,如700 - > 1和-700 - > 0,但是,这非常慢,因为我必须以这种方式遍历整个数组。
我也研究过np.logandexp(x1, x2)
,但我无法让它工作......
编辑:数据类型是float64顺便说一句
你可以使用表现很好的SciPy's expit()
function:
In [114]: from scipy.special import expit
# sample input array
In [115]: x = np.arange(50000, dtype=np.float64)
In [116]: sigm = expit(x)
# sanity check for no `np.inf`
In [117]: expit(70000.0)
Out[117]: 1.0
您可以将输入转换为日志空间并在之后运行sigmoid,这会显着缩小大值。