0

我正在运行一些需要使用以下功能的实验:

import math

def sigmoid(x):
    return 1.0 / (1.0 + math.exp(-x))

该函数从0.0to返回一个数字1.0(参见https://en.wikipedia.org/wiki/Sigmoid_function)。如果我给它输入小值x,那么结果如预期,例如

>>> sigmoid(1)
0.7310585786300049
>>> sigmoid(5)
0.9933071490757153
>>> sigmoid(7)
0.9990889488055994
>>> sigmoid(10)
0.9999546021312976
>>> sigmoid(20)
0.9999999979388463
>>> sigmoid(30)
0.9999999999999065

但是,当 x 变大时,函数总是返回 1.0。

>>> sigmoid(40)
1.0
>>> sigmoid(45)
1.0
>>> sigmoid(50)

我怀疑这与将 1.0 与可能非常小的数字 ( 1.0 + math.exp(-x)) 相加的函数部分有关。例如

>>> 1.0 + math.exp(-30)
1.0000000000000935
>>> 1.0 + math.exp(-40)
1.0
>>> 1.0 + math.exp(-50)
1.0
>>> 1.0 + math.exp(-60)
1.0

如何防止 Python 出现此类错误?我认为这是一个上溢(或下溢??)问题。有小费吗?提前致谢。

4

0 回答 0