我是tensorflow框架的新手。我在用
我的代码中nans
。但检查输出我发现有些值是负面的。怎么可能?我怀疑它可能是由于某些inf
或X
值所以我在检查中删除了我的输入中的这些值(res = tf.where(tf.is_inf(X), tf.zeros_like(X), X)
res = tf.where(tf.is_nan(res), tf.zeros_like(res), res)
output = tf.reduce_logsumexp(res, axis=0)
是我的输入):
{{1}}
但即使这样也无济于事,我仍然认为某些价值观为负面。任何帮助赞赏!感谢
答案 0 :(得分:0)
请注意,如果参数小于1,则对数为负。因此,如果指数的总和小于1,则总是会得到负logsumexp
输出。例如,如果全部指数远小于零,即你有
res = [-2.5,-1.4,-3.3,-1.65,-2.15],那么相应的指数是
exp(res)= [0.082,0.247,0.037,0.192,0.116]及其总和
sum(exp(res))= 0.674小于1.
如果你拿对数,你得到 log(sum(exp(res)))= log(0.674)= - 0.394。
它只是从函数的定义中出现,它不一定具有正输出。您可以使用以下程序对其进行测试:
import numpy as np
def logsumexp(arr):
summ = 0.0
for i in range(arr.shape[0]):
print(np.exp(arr[i]))
summ += np.exp(arr[i])
print('Sum: {}'.format(summ))
return np.log(np.sum(np.exp(arr)))
arr = np.asarray([-2.5, -1.4, -3.3, -1.65, -2.15])
print('LogSumExp: {}'.format(logsumexp(arr)))