Я отлаживал свою программу и понял, что моя потеря выдает 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)), в противном случае не очень аккуратна.
Спасибо