gpt4 book ai didi

python - 在 python 中使用 softplus 函数避免溢出

转载 作者:太空狗 更新时间:2023-10-29 20:10:23 25 4
gpt4 key购买 nike

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

log(1 + exp(x))

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

你能帮助我如何成功地处理这个函数吗?

最佳答案

TLDR:

import numpy as np
import math

def softplus_np(x): return np.log1p(np.exp(-np.abs(x))) + np.maximum(x, 0)
def softplus_math(x): return math.log1p(math.exp(-abs(x))) + max(x, 0)

解释:有一个可以使用的关系:

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)

这适用于 mathnumpy 函数(使用例如:np.lognp.exp , np.abs, np.maximum).

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com