簡體   English   中英

在2d-array上使用函數時處理numpy.exp溢出

[英]Handling numpy.exp overflow when using function on 2d-array

我有一個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順便說一句

您可以將輸入轉換為日志空間並在之后運行sigmoid,這會顯着縮小大值。

您可以使用SciPy的expit()函數 ,該函數非常好用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM