2017-08-09 7 views
0

私はtensorflowフレームワークが初めてです。私は tf.reduce_logsumexpを私のコードに使用しています。しかし、出力を調べると、値の一部が負であることがわかります。そんなことがあるものか?私はこのように私の入力にこれらの値を削除するには、チェックを入れて、それが原因にはいくつかのnansまたはinf値かもしれないと疑わ(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の出力が負になります。これは、たとえばすべての指数その後、対応する指数関数は

EXP(RES)= [0.082、0.247あり、ゼロよりはるかに小さいですあなたは

のres = [-2.5、-1.4、-3.3、-1.65、-2.15]を持っている、すなわち、 、0.037,0.192,0.116]およびその和

合計(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))) 
関連する問題