我正在运行一些需要使用以下功能的实验:
import math
def sigmoid(x):
return 1.0 / (1.0 + math.exp(-x))
该函数从0.0
to返回一个数字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 出现此类错误?我认为这是一个上溢(或下溢??)问题。有小费吗?提前致谢。