我为sigmoid函数写了这个lambda:
sigmoid = lambda x: 1 / (1 + np.exp(-x))
我在数组上使用它来显然计算sigmoid。
Python给了我一个警告:
RuntimeWarning: overflow encountered in exp
这个陈述。我该如何解决?
发送到此lambda的值是浮点数。
答案 0 :(得分:1)
np.clip也可以同时处理x
数组
import sys
import numpy as np
xmax = np.log(sys.float_info.max)
sigmoid = lambda x: 1 / (1 + np.exp(np.clip(-x, a_min=None, a_max=xmax)))
sigmoid(-10000)
Out[155]: 5.5626846462681369e-309
答案 1 :(得分:1)
您可以使用numpy.seterr
numpy.seterr()
始终会返回一个字典,其中包含当前对不同数字错误的处理,默认情况下为
>>> seterr()
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
>>>
要更改其中一项行为并保存当前默认值,您可以 做
>>> def_handlers = np.seterr(over='ignore')
然后你可以进行sigmoid评估,最后你可以恢复默认值
>>> np.seterr(**def_handlers);
考虑到sigmoid值数组现在可能包含inf
条目,您的代码具有来处理此可能性。