2016-04-30 223 views
1

tensorflow CNN tutorial,它计算的准确性,但我想从中利用混淆矩阵。tensorflow评估混淆矩阵

随即,三种不同的方法打在我的脑海里:

  1. 我试图直接计算在tensorflow预测结果,而不是top_k_op,那么我可以利用sklearn。但是我失败了,因为它使用了多个线程来计算(line 88);

  2. 我试图加载训练有素的变量,并给予新的占位符cifar10.inference,但再次失败,因为它定义batch_image为输入(line 225);

  3. 最后一种方法是定义一个新的操作来代替line 128

    top_k_op = tf.nn.in_top_k(logits, labels, 1) 
    

    ,但我无法找到合适的操作能做到这一点。

这让我折磨了好几天。请帮忙。先谢谢你。

回答

2

只有在所有数据集上运行“推理”后,才能使用sklearn的confusion_matrix。 意思是,如果你修改eval_only函数,你应该把所有的分数累加到一个线程安全的容器(列表)中。然后在所有线程停止后(第113行),您可以运行单个混淆矩阵计算。

此外,如果你想在图中做到这一点,TensorFlow最近得到了confusion_matrixop你可以尝试使用。也就是说,它只适用于批处理,因此您需要增加批量以获得任何类型的解决方案或编写自定义聚合器。

+0

您的第一个解决方案效果很好,但并不完美:如果示例数量不是批次数的乘数,则要评估的示例数量大于实际数量。你有一个想法如何解决这个问题?提前致谢。 – Tengerye