在2D数组上使用函数时处理numpy.exp溢出

时间:2019-04-14 13:01:42

标签: python numpy exponentiation sigmoid

我有一个二维的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

2 个答案:

答案 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