tf.math.cumulative_logsumexp
| Просмотреть исходный код на GitHub |
Вычислить кумулятивную логарифмическую сумму экспонент тензора x вдоль axis.
tf.math.cumulative_logsumexp(
x, axis=0, exclusive=False, reverse=False, name=None
)
По умолчанию этот оператор выполняет кумулятивную логарифмическую сумму экспонент по включительному принципу, что означает, что первый элемент входного значения совпадает с первым элементом выходного значения.
Данная операция значительно более устойчива к числовым ошибкам, чем эквивалентная операция TensorFlow tf.math.log(tf.math.cumsum(tf.math.exp(x))), хотя вычисляет тот же результат при бесконечной точности. Однако обратите внимание, что в некоторых случаях она может быть менее устойчивой, чем tf.math.reduce_logsumexp для данного элемента, так как использует «приём логарифмической суммы экспонент» по-другому.
Более точно, где tf.math.reduce_logsumexp использует следующий приём:
log(sum(exp(x))) == log(sum(exp(x - max(x)))) + max(x)
его нельзя напрямую использовать здесь, так как нет быстрого способа применить его к каждому префиксу x[:i]. Вместо этого эта функция реализует сканирование префикса с использованием парной логарифмической суммы экспонент, которая является коммутативной и ассоциативной операцией (с точностью до погрешности с плавающей точкой):
log_add_exp(x, y) = log(exp(x) + exp(y))
= log(1 + exp(min(x, y) - max(x, y))) + max(x, y)
Однако, уменьшение с использованием вышеуказанной операции приводит к различной вычислительной структуре (логарифмы вычисляются повторно, а не только в конце), а максимум вычисляется только попарно, а не по всему префиксу. В общем, это приводит к другому, несколько менее точному вычислению.
| Аргументы | |
|---|---|
x | Тензор. Должен быть одного из следующих типов: float16, float32, float64. |
axis | Численный скалярный тип int32 или int64 (по умолчанию: 0). Должен быть в диапазоне [-rank(x), rank(x)). |
exclusive | Если True, выполнить эксклюзивную кумулятивную логарифмическую сумму экспонент. |
reverse | Если True, выполнить кумулятивную логарифмическую сумму экспонент в обратном направлении. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Тензор. Имеет ту же форму и тип, что и x. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/math/cumulative_logsumexp