机器学习:如何识别图像中是否没有受过训练的类的对象

时间:2016-01-14 18:02:18

标签: machine-learning deep-learning tensorflow

如果我训练一个深度神经网络(例如)10个类并且我给网络提供了一个完全不同的图像,那么期望输出层的单元格不会激活很多是合理的,所以我会知道没有任何对象图像中训练有素的课程?

我的直觉说“是”,但是这样吗?什么是最好的方法呢?

由于

2 个答案:

答案 0 :(得分:10)

在监督培训期间,您通常会认为在培训期间您可以完整地表示未来的对象类型。通常 - 这些都是标记的实例。在你的情况下 - 也有“噪音”实例,因此基本上有两种主要方法:

  • 由于多类神经网络具有K个输出神经元,每个神经网络表示成为特定类成员的概率,您可以简单地对这些分布进行调节,以表明新对象不属于任何一个。一种特殊方法是检查某些阈值min(p(y|x))<T是否T(其中p(y | x)是输出神经元的激活)。你可以手动设置这个值,也可以通过分析你的“噪音”实例(你确实有一些用于训练)。只需将它们传递到您的网络,并比较T的哪个值可以提供最佳识别率
  • 在您的网络之前添加另一个单类分类器(异常检测器) - 因此您将最终得到两个分类器的序列,首先能够识别它是否是任何类的噪声或元素(注意,那个这可以在无法访问噪声样本的情况下进行训练,请参阅一级分类异常检测技术。

您还可以向网络添加另一个输出以表示噪声,但这可能无法正常工作,因为您将强制网络为噪声与数据和类间决策生成一致的内部表示。

答案 1 :(得分:5)

您的问题的答案很大程度上取决于您的网络架构和用于训练它的参数。如果您试图防止误报,我们通常可以在相关的输出节点上设置任意阈值。

更一般地说,学习算法大多采用“闭集”识别的形式,其中所有测试类在训练时都是已知的。然而,视觉应用的一个更现实的场景是“开放式”识别,其中在训练时存在不完整的世界知识,并且在测试期间可以提交未知的类。

这是一个正在进行的研究领域 - 请参阅此Open Set Recognition网页,了解有关该主题的大量资源。