3

我有一个 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 btw

4

2 回答 2

0

您可以将输入转换为日志空间并在之后运行 sigmoid,这会显着缩小较大的值。

于 2019-04-14T13:18:19.873 回答
0

您可以使用表现良好的 SciPyexpit()函数:

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
于 2019-04-14T13:20:09.880 回答