如何在 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 是遵守上述约束的一维张量的大小相等的小批量,它也应该有效。
我需要在 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 是遵守上述约束的一维张量的大小相等的小批量,它也应该有效。