如何在 TensorFlow 中实现 Kullback-Leibler 损失?

How can I implement the Kullback-Leibler loss in TensorFlow?

我需要在 tensorflow 中最小化 KL loss

我试过这个功能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))

是否正确?

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

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

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

如果 p 和 q 是遵守上述约束的一维张量的大小相等的小批量,它也应该有效。