Python中sigmoid函数中报: RuntimeWarning: overflow encountered in exp

sigmoid 函数中使用 numpy.exp 的时候,遇到了 RuntimeWarning: overflow encountered in exp 。

原因:因为参数值inx很大时,exp(inx)可能会发生溢出,

有一种解决方式是对sigmoid函数实现的优化:如https://blog.youkuaiyun.com/CY_TEC/article/details/106083366

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

这样做可以保证exp(inx)值始终小于1,避免极大溢出。

但,个人总感觉这样有点怪,作者也说会出现下溢风险。所以查到一种方式,用scipy.special模块中的expit代替numpy中的exp,如下:

from scipy.special import expit

def sigmoid(z):
    """ 假设函数:logistics的假设函数是sigmoid函数 
        用expit函数来代替np中的exp

    """
    return expit(z)

expit函数,也称为logistic sigmoid函数,定义为expit(x)= 1 /(1 + exp(-x))。 它是logit函数的反函数。

参数:x:ndarray
   ndarray的元素应用expit函数
输出:
   out:ndarray
   与x形状相同的ndarray,它的元素是对应元素输入expit函数的结果

参考:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.special.expit.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值