log(1+exp(X)) 在 Tensorflow 中(避免欠流和过流)



我正在调试我的程序,我意识到我的损失输出了 NaN。这些 NaN 值来自我正在计算tf.log(1 + tf.exp(X))

其中 X 是 2D 张量。事实上,当 X 的值足够大时,tf.exp(( 返回 +Inf,因此tf.log(1 + exp(X))将返回+Inf。我想知道在这种情况下是否存在一个巧妙的技巧来避免下溢和溢出。

我试过:

def log1exp(x):
maxi = tf.reduce_max(x)
return maxi + tf.log(tf.exp(x - maxi) + tf.exp(-maxi))

但在这种情况下,它不处理下溢...

我也看了一眼tf.reduce_logsumexp但它必然会减少沿轴的张量......而我想保持相同的形状!

最后,我知道对于 X 的大值,tf.log(1 + exp(X))几乎等于X,但我认为设计一个在X > threshold和 log(1+exp(X(( 时输出X的函数不是很整洁。

谢谢

这个函数已经在张量流中以tf.math.softplus的名义实现,并负责溢出和下溢。

相关内容

  • 没有找到相关文章

最新更新