2017-06-01 55 views
0

我想用KL散度来计算我的网络的精度。预测是一个k维概率向量,它应该与相同维度的黄金标准概率分布进行比较。 我尝试这样做:Tensorflow:KL分类用于分类概率分布

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

但最终得到以下错误:

NotImplementedError: No KL(dist_a || dist_b) registered for dist_a type Tensor and dist_b type Tensor

回答

1

检查tensorflow 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) 
+0

加强与其他选择的答案 – DarkCygnus