我有一个关于卷积神经网络(CNN)训练的问题。
我已经成功地使用tensorflow训练了一个网络,它接受一个输入图像(1600像素),并输出三个匹配它的类中的一个。
用训练好的类的变体测试网络得到了很好的结果。然而,当我给它一个不同的第四图像(不包含任何经过训练的3图像)时,它总是返回一个随机匹配到其中一个类。
我的问题是,我如何训练网络来分类图像不属于这三个训练图像中的任何一个?一个类似的例子,如果我针对mnist数据库训练一个网络,然后给它一个字符"A“或"B”。有没有一种方法可以区分输入不属于这两个类?
谢谢
发布于 2017-11-22 22:58:37
您可能有三个输出节点,并选择最大值(一次热编码)。这有点不幸,因为它的输出数量很少。无法识别的输入往往会导致相当随机的输出。
现在,有3个输出,粗略地说,你可以得到7个结果。您可能会得到一个高的值(3种可能性),但无法识别的输入也可能导致2种高的输出(也有3种可能性)或大致相等的输出(也有3种可能性)。因此,随机输入在输出节点上产生模式的可能性很大(~ 3/7),这是您仅对已识别的输入所期望的。
现在,如果您有15个类,因此有15个输出节点,那么对于未识别的输入,您将看到大约32767个可能的结果,其中只有15个对应于预期的单热点结果。
这背后的原因是缺乏训练数据。如果你的训练集有3个类别之外的例子,你可以把它放在第四个“其他”类别中,然后用它进行训练。这本身并不是一个可靠的指示,因为通常理论上的“其他”集合是巨大的,但您现在有两种互补的方法来检测其他输入:通过“其他”输出节点或通过11个不明确的输出中的一个。
https://stackoverflow.com/questions/47348343
复制相似问题