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

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

网上一般的做法为如下,但是对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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年6月9日 下午12:10
下一篇 2022年6月15日 上午11:54

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!