我有一个二维的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 btw
答案 0 :(得分:0)
您可以将输入转换为日志空间,然后运行sigmoid,这将大大缩小大的值。
答案 1 :(得分:0)
您可以使用行为良好的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