当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.math.cumulative_logsumexp用法及代码示例


沿 axis 计算张量 x 的累积 log-sum-exp。

用法

tf.math.cumulative_logsumexp(
    x, axis=0, exclusive=False, reverse=False, name=None
)

参数

  • x 一个Tensor。必须是以下类型之一:float16 , float32 , float64
  • axis Tensor 类型为 int32int64(默认值:0)。必须在 [-rank(x), rank(x)) 范围内。
  • exclusive 如果是True,则执行排他累积log-sum-exp。
  • reverse 如果 True ,则在相反方向执行累积 log-sum-exp。
  • name 操作的名称(可选)。

返回

  • 一个Tensor。具有与 x 相同的形状和类型。

默认情况下,此操作执行包含累积log-sum-exp,这意味着输入的第一个元素与输出的第一个元素相同。

此操作在数值上比等效的 tensorflow 操作 tf.math.log(tf.math.cumsum(tf.math.exp(x))) 更加稳定,尽管在给定无限数值精度的情况下计算相同的结果。但是,请注意,在某些情况下,对于给定元素,它可能不如 tf.math.reduce_logsumexp 稳定,因为它以不同的方式应用“log-sum-exp 技巧”。

更准确地说,tf.math.reduce_logsumexp 使用以下技巧:

log(sum(exp(x))) == log(sum(exp(x - max(x)))) + max(x)

它不能在这里直接使用,因为没有快速的方法将它应用于每个前缀 x[:i] 。相反,此函数使用成对 log-add-exp 实现前缀扫描,这是一个可交换和关联(最高浮点精度)运算符:

log_add_exp(x, y) = log(exp(x) + exp(y))
                  = log(1 + exp(min(x, y) - max(x, y))) + max(x, y)

但是,使用上述运算符减少会导致不同的计算树(重复获取日志而不是仅在末尾),并且最大值仅是成对计算的,而不是在整个前缀上计算。通常,这会导致不同的且精度稍低的计算。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.math.cumulative_logsumexp。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。