gpt4 book ai didi

python - Python 的 numpy.exp 函数中的溢出错误

转载 作者:太空狗 更新时间:2023-10-30 00:22:45 24 4
gpt4 key购买 nike

我想像这样使用 numpy.exp:

cc = np.array([
[0.120,0.34,-1234.1]
])

print 1/(1+np.exp(-cc))

但这给了我错误:

/usr/local/lib/python2.7/site-packages/ipykernel/__main__.py:5: RuntimeWarning: overflow encountered in exp

我不明白为什么?我怎样才能解决这个问题?似乎问题出在第三个数字 (-1234.1)

最佳答案

正如 fuglede 所说,这里的问题是 np.float64无法处理像 exp(1234.1) 这样大的数字.尝试使用 np.float128相反:

>>> cc = np.array([[0.120,0.34,-1234.1]], dtype=np.float128)
>>> cc
array([[ 0.12, 0.34, -1234.1]], dtype=float128)
>>> 1 / (1 + np.exp(-cc))
array([[ 0.52996405, 0.58419052, 1.0893812e-536]], dtype=float128)

但是请注意,使用扩展精度有一些怪癖。它可能不适用于 Windows;您实际上并没有获得完整的 128 位精度;每当数字通过纯 python 时,您可能会失去精度。详情可以看here .

对于大多数实际用途,您可能近似于 1 / (1 + <a large number>)归零。也就是说,忽略警告并继续前进。 Numpy 会为您处理近似值(使用 np.float64 时):

>>> 1 / (1 + np.exp(-cc))
/usr/local/bin/ipython3:1: RuntimeWarning: overflow encountered in exp
#!/usr/local/bin/python3.4
array([[ 0.52996405, 0.58419052, 0. ]])

如果你想抑制警告,你可以使用 scipy.special.expit ,正如 WarrenWeckesser 在对该问题的评论中所建议的:

>>> from scipy.special import expit
>>> expit(cc)
array([[ 0.52996405, 0.58419052, 0. ]])

关于python - Python 的 numpy.exp 函数中的溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40726490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com