6

我需要最小化tensorflow中的KL 损失

我试过这个功能tf.contrib.distributions.kl(dist_a, dist_b, allow_nan=False, name=None),但我失败了。

我试图手动实现它:

def kl_divergence(p,q):
    return p* tf.log(p/q)+(1-p)*tf.log((1-p)/(1-q))

这是正确的吗?

4

1 回答 1

10

你所拥有的是交叉熵,KL散度应该是这样的:

def kl_divergence(p, q): 
    return tf.reduce_sum(p * tf.log(p/q))

这假设 p 和 q 都是 float 的一维张量,具有相同的形状,并且对于每个,它们的值总和为 1。

如果 p 和 q 是服从上述约束的相同大小的一维张量小批量,它也应该起作用。

于 2017-04-08T17:56:30.940 回答