log (1 + exp (X)) в Tensorflow (избегая недостаточного и избыточного потоков) - PullRequest
0 голосов
/ 04 июня 2018

Я отлаживал свою программу и понял, что моя потеря выдает NaN.Эти значения NaN проистекают из того факта, что я вычисляю tf.log(1 + tf.exp(X))

, где X - это двумерный тензор.В самом деле, если значение 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, но он обязательно уменьшит тензор вдоль оси ... хотя я хочу сохранить ту же самую форму!

Наконец я знаю, что tf.log(1 + exp(X))почти равен X для больших значений X, но я думаю, что разработка функции, которая будет выводить X при X > threshold и log (1 + exp (X)), в противном случае не очень аккуратна.

Спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Эта функция уже реализована в тензорном потоке под именем tf.nn.softplus и обеспечивает переполнение и переполнение.

...