栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决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))

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971220.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号