tensorflow 使用混淆矩阵进行评估

Posted

技术标签:

【中文标题】tensorflow 使用混淆矩阵进行评估【英文标题】:tensorflow evaluate with confusion matrix 【发布时间】:2016-08-25 22:05:39 【问题描述】:

在tensorflow CNN tutorial 中,它计算准确性,但我想利用它来计算混淆矩阵。

我立刻想到了三种不同的方法:

    我尝试直接计算预测结果而不是tensorflow中的top_k_op,然后我可以使用sklearn。但是我失败了,因为它使用了多个线程来计算(line 88);

    我尝试加载经过训练的变量并为 cifar10.inference 提供新的占位符,但再次失败,因为它将 batch_image 定义为输入(line 225);

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

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

    但我找不到合适的操作可以做到这一点。

这困扰了我好几天。请帮忙。提前谢谢你。

【问题讨论】:

【参考方案1】:

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

另外,如果你想在图中做,TensorFlow最近得到了confusion_matrixop你可以尝试使用。也就是说,它仅适用于批次,因此您需要增加批次以获得任何类型的分辨率或编写自定义聚合器。

【讨论】:

您的第一个解决方案效果很好,但不是很完美:当示例数不是批次数的倍数时,要评估的示例数大于实际数。你知道如何解决这个问题吗?提前致谢。

以上是关于tensorflow 使用混淆矩阵进行评估的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)

如何创建混淆矩阵来评估模型?

如何在 Tensorflow 中正确使用 tf.metrics.mean_iou 在 Tensorboard 上显示混淆矩阵?

机器学习模型评估——混淆矩阵

TensorFlow 的混淆矩阵

使用 one-hot 代码的 TensorFlow 混淆矩阵