美文网首页python
解决python numpy RuntimeWarning: o

解决python numpy RuntimeWarning: o

作者: CScgy | 来源:发表于2023-04-17 15:15 被阅读0次

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

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

    相关文章

      网友评论

        本文标题:解决python numpy RuntimeWarning: o

        本文链接:https://www.haomeiwen.com/subject/ijdcjdtx.html