【问题标题】:sigmoid RuntimeWarning: overflow encountered in expsigmoid RuntimeWarning:exp 中遇到溢出
【发布时间】:2018-07-10 11:16:52
【问题描述】:

我正在尝试在 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

【问题讨论】:

标签: python python-2.7 numpy floating-point


【解决方案1】:

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

也就是说,当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)

【讨论】:

  • 剪辑到 sigmoid = 1.0 的上限而不是 0.0 是否更好?
  • ValueError: 数据类型 不准确
猜你喜欢
  • 2017-11-15
  • 2020-12-06
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多