我正在尝试实现以下softplus功能:

log(1 + exp(x))

我已经尝试过使用math/numpy和float64作为数据类型,但是每当x变得太大(例如x = 1000)时,结果就是inf

您能协助我成功地大量处理此功能吗?

最佳答案

有一种关系可以使用:

log(1+exp(x)) = log(1+exp(x)) - log(exp(x)) + x = log(1+exp(-x)) + x

因此,从数学上来说,一个安全的实现是:
log(1+exp(-abs(x))) + max(x,0)

这适用于数学和numpy函数(例如:np.log,np.exp,np.abs,np.maximum)。

关于python - 避免在Python中使用softplus函数溢出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44230635/

10-12 21:09