Tensorflow:tf.reduce_logsumexp返回负值

时间:2017-08-09 02:25:04

标签: tensorflow deep-learning tensorflow-gpu

我是tensorflow框架的新手。我在用     我的代码中nans。但检查输出我发现有些值是负面的。怎么可能?我怀疑它可能是由于某些infX值所以我在检查中删除了我的输入中的这些值(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}}

但即使这样也无济于事,我仍然认为某些价值观为负面。任何帮助赞赏!感谢

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)))