sigmoid RuntimeWarning:在exp中遇到溢出

时间:2018-01-31 11:03:38

标签: python python-2.7 numpy floating-point

我试图在Python中创建一个sigmoid函数,但是,我收到以下错误:

 RuntimeWarning: overflow encountered in exp

这是我的代码:

    def sigmoid(self, value):

    a = np.exp(-value)
    return 1.0/ (1.0 + a)

我搜索了之前的答案,但他们并没有解决我的问题。 问题在于计算a的值。 我也尝试过使用:

a = np.float128(np.exp(-value))

但我得到了同样的错误,并使用:

a = np.float256(np.exp(-value))

我收到以下错误:

AttributeError: 'module' object has no attribute 'float256'

我认为如果我有溢出,我可以返回0,如果我有下溢,我可以返回1

1 个答案:

答案 0 :(得分:3)

警告不是错误。你可以忽略它。

也就是说,当exp(-value)的结果超过value浮点数据类型格式所代表的最大数字时,就会发生这种情况。

您可以通过检查value是否太小来阻止溢出:

def sigmoid(value):
    if -value > np.log(np.finfo(type(value)).max):
        return 0.0    
    a = np.exp(-value)
    return 1.0/ (1.0 + a)