例如,我需要检测 MNIST 数据的类别。但我不希望有 10 类数字,而且我希望有第 11 类“不是数字”,这样任何字母、任何其他类型的图像或随机噪声都会被归类为“非数字”。同样,对于 CIFAR-10,我希望有第 11 个“未知”类来对包含 CIFAR-10 可用的 10 个类中的任何图像的任何图像进行分类。
那么,如何实现这样的功能呢?也许在某个地方有一些例子,最好是 Keras。
例如,我需要检测 MNIST 数据的类别。但我不希望有 10 类数字,而且我希望有第 11 类“不是数字”,这样任何字母、任何其他类型的图像或随机噪声都会被归类为“非数字”。同样,对于 CIFAR-10,我希望有第 11 个“未知”类来对包含 CIFAR-10 可用的 10 个类中的任何图像的任何图像进行分类。
那么,如何实现这样的功能呢?也许在某个地方有一些例子,最好是 Keras。
实现这一点的常用方法是添加带有数据示例的新类。
您需要解决的一些问题:
为您的“其他”类采购新数据。
确保“其他”类示例中数据的数量和变化与预测器的使用方式相匹配。
不需要为此的代码示例,因为您只需使用与已有的相同的网络设计并添加另一个输出即可。这是一个数据和模型定义问题。
从逻辑上讲,您还有另一个选择:除了输出预测的类别外,您还可以单独预测是否有任何可检测的对象作为真/假值。这仍然需要额外的数据,但例如 YOLO 算法如何用于对象检测。对象检测具有特定含义 - 它涉及在图像中查找可能多个对象的坐标和类别。这超出了您问题的措辞,但如果您提出此类问题,这是一个典型的最终目标。
YOLO 与对象类别分开预测对象的存在。YOLO 训练的额外数据来自对源图像的分割,因此目标图像的许多部分都是没有对象的背景。在这种情况下,您需要的额外数据是由于每个图像示例中的更详细标签。
YOLO 是一个相当复杂的架构,因此如果您的目标是对象检测,您可能希望查看在Github 项目中使用 Keras 的这个示例以了解更多详细信息。
如果您使用 softmax 分布进行分类,那么您可以确定正确分类样本的基线最大概率是多少,然后推断新样本是否不属于任何已知类别(如果其最大概率低于某个值)种门槛。
这个想法来自一篇研究论文,该论文比我刚才所说的更好地解释了这个过程:A Baseline for Detecting Misclassified and Out-of-Distribution Examples in Neural Networks