2017-08-09 128 views
0

我是tensorflow框架的新手。我在我的代码中使用了 tf.reduce_logsumexp。但是检查输出结果我发现有些值是负值。这怎么可能?我怀疑,所以我把支票给我输入这样的删除这些值可能是由于一些nansinf值(X是我输入):Tensorflow:tf.reduce_logsumexp返回负值

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) 

但是,即使这并不能帮助我仍然有一些负面的价值。任何帮助感谢!谢谢

+0

请注意,'tf.reduce_logsumexp([ - 1。])'为-1 –

回答

0

请注意,如果参数小于1,则对数为负数。因此,如果指数的和小于1,您将始终得到负值logsumexp。例如,如果所有指数是大于零小得多,即你有

解析度= [-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)))