解决python numpy RuntimeWarning: overflow encountered in exp的较好方法

在自定义神经网络中,使用sigmoid函数时,报数据溢出overflow错误。

def sigmoid(self, x):
    return 1.0 / (1 + np.exp(-x))

RuntimeWarning: overflow encountered in exp
根据测试(测试代码如下),是因为指数出现极大的数据,导致np.exp运算溢出

def sigmoid(self, x):
    print(x.min())
    return 1.0 / (1 + np.exp(-x))
image.png

网上一般的做法为如下,但是对x为数组却不能执行。

def sigmoid(x):
   if x>=0: #对sigmoid函数优化,避免出现极大的数据溢出
       return 1.0 / (1 + np.exp(-x))
   else:
       return np.exp(x)/(1+np.exp(x))

在我的Python中运行上述代码,x为数组时报错如下:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
x的值不止一个,需要对所有的x都进行判断。
因此本人提出的较好的修改方案如下:如有疑问欢迎评论指出。

def sigmoid(self, x):
    y = x.copy()      # 对sigmoid函数优化,避免出现极大的数据溢出
    y[x >= 0] = 1.0 / (1 + np.exp(-x[x >= 0]))
    y[x < 0] = np.exp(x[x < 0]) / (1 + np.exp(x[x < 0]))
    return y

如果这篇文章大家觉得有意义的话请多多点赞、收藏支持,也可以在下面点击“赞赏支持”按钮打赏支持我哟~

版权声明:
作者:主机优惠
链接:https://www.techfm.club/p/54972.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>