使用np.expm1计算sigmoid函数

时间:2018-04-25 16:04:54

标签: numpy floating-point

计算sigmoid function时,由于缺少浮点精度,x的小值或大值将分别返回0和1。在numpy中,函数np.expm1将以极高的x值精度计算exp(x)-1。但是,不存在用于计算exp(x)+1(sigmoid函数中的分母)的等效函数。我无法弄清楚如何使用np.expm1来计算在极值下具有更高精度的sigmoid。有办法吗?

1/(np.exp(-20)+1)==1.0
#False
1/(np.exp(-50)+1)==1.0
# True

1 个答案:

答案 0 :(得分:1)

np.expm1减轻重要性丢失,当两个几乎相等的数字之间存在差异时(因为许多重要位置相互抵消,结果将比数据类型更少)可以存储。)

1/(np.exp(-50)+1)==1.0

是数据类型的限制,而不是算法。 floats无法解决1.0exp(-50)一样小的差异。实际上,1.0左右最近的浮点数是

>>> np.nextafter(1.0, 0.0)
0.9999999999999999
>>> np.nextafter(1.0, 2.0)
1.0000000000000002

表示oom 10^-16的分辨率,远不及足以区分11 +/- exp(-50)

相关问题