Tensorflow:分类概率分布的 KL 散度

Posted

技术标签:

【中文标题】Tensorflow:分类概率分布的 KL 散度【英文标题】:Tensorflow: KL divergence for categorical probability distribution 【发布时间】:2017-11-02 20:04:59 【问题描述】:

我正在尝试使用 KL 散度计算我的网络的准确性。预测是一个 k 维概率向量,应与相同维度的黄金标准概率分布进行比较。 我试过这个:

corr_subj_test = tf.contrib.distributions.kl(pred_subj, y)
accr_subj_test = tf.reduce_mean(corr_subj_test)

但最终得到如下错误:

NotImplementedError: 没有为 dist_a 注册 KL(dist_a || dist_b) 类型张量和 dist_b 类型张量

【问题讨论】:

【参考方案1】:

检查张量流github 和其他一些给出相同NotImplementedError 错误的问题(如this one)似乎kl() 方法当前不接受参数类型的特定组合。

如果可能,您可以将您的数据以它接受的数据类型传递给kl()(可能会转换您的数据以实现此目的)。**

您也可以尝试将其发布到 tensorflow issues 以讨论您的问题。

** 编辑:

正如this 问题中的答案所建议和解释的那样,您可以通过使用交叉熵而不是softmax_cross_entropy_with_logits 方法来获得所需的结果,如下所示:

newY = pred_subj/y
crossE = tf.nn.softmax_cross_entropy_with_logits(pred_subj, newY)
accr_subj_test = tf.reduce_mean(-crossE)

【讨论】:

用其他替代方案增强了我的答案

以上是关于Tensorflow:分类概率分布的 KL 散度的主要内容,如果未能解决你的问题,请参考以下文章

KL散度、JS散度、Wassertein距离

相对熵(KL散度)

交叉熵与KL散度

KL散度

KL散度(KL divergence, JS divergence)

概率分布之间的距离度量以及python实现