Python 3.x Log1Exp在Tensorflow中不可用?

Python 3.x Log1Exp在Tensorflow中不可用?,python-3.x,math,floating-point,numeric,tensorflow2.0,Python 3.x,Math,Floating Point,Numeric,Tensorflow2.0,log1pexpx以数值稳定的方式实现log1+expx。遗憾的是,tensorflow.math模块中不存在此函数 使用tensorflow中提供的log1p,这实际上非常容易实现。以下是基于 我可以定义这个函数,但我担心它可能比本机TF实现慢?另外,如果x是一个张量,我希望它能起作用,它应该在元素方面应用,但我不确定如何处理分支 有什么建议吗 如果我必须手动实现它,我将非常感谢您对如何在不必用C编写的情况下尽可能快地实现它的任何建议。尝试: 事实证明tensorflow确实有此函数的本机实现

log1pexpx以数值稳定的方式实现log1+expx。遗憾的是,tensorflow.math模块中不存在此函数

使用tensorflow中提供的log1p,这实际上非常容易实现。以下是基于

我可以定义这个函数,但我担心它可能比本机TF实现慢?另外,如果x是一个张量,我希望它能起作用,它应该在元素方面应用,但我不确定如何处理分支

有什么建议吗

如果我必须手动实现它,我将非常感谢您对如何在不必用C编写的情况下尽可能快地实现它的任何建议。

尝试:


事实证明tensorflow确实有此函数的本机实现,但名称为tensorflow.math.softplus

def log1pexp(x):
    if x < 9:
        return log1p(exp(x))
    elif x < 16:
        return x + exp(-x)
    else:
        return x
x = tf.range(20,dtype=tf.float64)
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
result = tf.where(tf.less(x,9),
                  tf.log1p(tf.exp(x)),
                  tf.where(tf.less(x,16),
                           x + tf.exp(-x),
                           x))

# [ 0.69314718  1.31326169  2.12692801  3.04858735  4.01814993  5.00671535
#   6.00247569  7.00091147  8.00033541  9.00012341 10.0000454  11.0000167
#  12.00000614 13.00000226 14.00000083 15.00000031 16.         17.
#  18.         19.        ]