今天在sigmoid
函數中使用 numpy.exp
的時候,遇到了 RuntimeWarning: overflow encountered in exp
,看到其他人的博客裏面的解決方法。
# https://www.cnblogs.com/zhhy236400/p/9873322.html
def sigmoid(inx):
if inx>=0: #對sigmoid函數的優化,避免了出現極大的數據溢出
return 1.0/(1+exp(-inx))
else:
return exp(inx)/(1+exp(inx))
作者其實說清楚了,但是我自己看得時候,總覺得不太直觀,差那麼一點意思。於是就自己寫一下。
的函數如下圖:
時, 隨 增長比較快,就很容易上溢。
對於 sigmoid 函數,
如果在使用過程中 , 就非常容易上溢。
RuntimeWarning: overflow encountered in exp
和 sigmoid
本身沒有關係,只和 有關。
- 就非常容易上溢出。
- 就不會有什麼問題。
而
那麼就可以根據 是否大於零,來選擇兩個公式。
但是 時, 同樣有下溢的風險。
只是 numpy
報了 warning
,而 python 沒有報而已,兩者並沒有任何差別。
參考:
https://www.cnblogs.com/zhhy236400/p/9873322.html