當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。