sigmoid RuntimeWarning: exp 中遇到溢出

3 python floating-point numpy python-2.7

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

RuntimeWarning: overflow encountered in exp
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

def sigmoid(self, value):

    a = np.exp(-value)
    return 1.0/ (1.0 + a)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我收到以下错误:

AttributeError: 'module' object has no attribute 'float256'
Run Code Online (Sandbox Code Playgroud)

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

kaz*_*ase 5

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

也就是说,当 的结果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)
Run Code Online (Sandbox Code Playgroud)

  • ValueError:数据类型 <class 'numpy.object_'> 不精确 (2认同)