tensorflow - 我的 CNN 分类器对随机图像给出了错误的预测

标签 tensorflow classification conv-neural-network

我用 3 个数据类别(身份证、护照、账单)训练了我的 CNN 分类器(使用 tensorflow)。
当我使用属于 3 个类别之一的图像对其进行测试时,它给出了正确的预测。但是,当我用错误的图像(例如汽车图像)对其进行测试时,它会不断给我预测(即它预测汽车属于身份证类别)。

有没有办法让它显示错误消息而不是给出错误的预测?

最佳答案

这应该以不同的方式处理。这称为开放集识别问题。你可以谷歌它并找到更多关于它但基本上是这样的: 您无法在每个可以想象到的类别上训练您的分类器。它总是会遇到一些它不熟悉且以前从未见过的其他类。

有一些解决方案,我将从中挑选出其中的 3 个:

  1. 单独的二元分类器 - 您可以构建单独的二元分类器来识别图像并根据账单、护照或身份证件是否在图像中将它们分为两类。如果是,它应该让您已经构建的算法处理图像并将其分类为 3 个类别之一。如果第一个分类器说图像中有其他物体,您可以立即丢弃该图像,因为它不是账单/护照/身份证的图像。

  2. 阈值化。在身份证在图像上的情况下,身份证的概率很高,而账单和护照的概率相当低。在图像是其他东西(例如 汽车)的情况下,所有 3 个类别的概率很可能大致相同。换句话说,这两个类别的概率都没有真正脱颖而出。在这种情况下,您选择生成概率最高的概率并将输出类别设置为该概率的类别,而不管概率值是 0.4 还是类似值。要解决此问题,您可以将阈值设置为 0.7,如果两个概率均未超过该阈值,则图片上还有其他内容(不是身份证、护照或账单)。

  3. 创建第四个类:Unknown。如果您选择此选项,您应该将其他一些图像添加到数据集中并将它们标记为未知。然后训练分类器,看看结果如何。

我会推荐 1 或 2。希望它有帮助:)

关于tensorflow - 我的 CNN 分类器对随机图像给出了错误的预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52831038/

相关文章:

python-3.x - 名称错误 : name 'sess' is not defined

python - Scikit-learn 中的输出交叉验证模型(又名估计器)是什么?

C#:有没有办法对枚举进行分类?

python - 层序的输入 0 与预期的 ndim=3 层不兼容,发现 ndim=2。收到完整形状 : [None, 1]

python - “操作”对象没有属性 'compute_gradients' - tensorflow

machine-learning - 使用预训练的卷积神经网络了解特征提取

python - 在 Pytorch 中实现有状态 LSTM/ConvLSTM 的最佳方式?

python - axis=[1,2,3]在keras后端的K.sum中是什么意思?

python - 获取 TypeError : can't pickle _thread. RLock 对象

python - Tensorflow 2 坐标分类器