热点新闻
解决python numpy RuntimeWarning: overflow encountered in exp的较好方法
2023-07-19 07:04  浏览:720  搜索引擎搜索“手机展会网”
温馨提示:信息一旦丢失不一定找得到,请务必收藏信息以备急用!本站所有信息均是注册会员发布如遇到侵权请联系文章中的联系方式或客服删除!
联系我时,请说明是在手机展会网看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

在自定义神经网络中,使用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

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

发布人:b103****    IP:117.173.23.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发