我有一个关于卷积神经网络(CNN
)训练的问题。
我已经成功地使用tensorflow
训练了一个网络,它接受一个输入图像(1600像素),并输出三个匹配它的类中的一个。
用训练好的类的变体测试网络得到了很好的结果。然而,当我给它一个不同的第四图像(不包含任何经过训练的3图像)时,它总是返回一个随机匹配到其中一个类。
我的问题是,我如何训练网络来分类图像不属于这三个训练图像中的任何一个?一个类似的例子,如果我针对mnist
数据库训练一个网络,然后给它一个字符"A“或"B”。有没有一种方法可以区分输入不属于这两个类?
谢谢
发布于 2017-11-17 22:11:42
您的模型将始终像您的标签一样进行预测,因此,例如,如果您使用MNIST数据训练您的模型,当您进行预测时,预测将始终是0-9,就像MNIST标签一样。
你可以做的是首先用两个类别训练一个不同的模型,在这个模型中,你将预测一个图像是属于数据集A还是属于B.E.x。对于MNIST数据,您将所有数据标记为1,并添加来自不同来源(不是0-9)的数据,并将其标记为0。然后训练一个模型,以确定图像是否属于MNIST。
发布于 2017-11-17 19:12:06
卷积神经网络(CNN)在训练后从定义的类中预测结果。CNN总是从其中一个类返回,而不考虑准确性。我也遇到过类似的问题,你能做的就是检查准确值。如果准确率低于某个阈值,则它属于无类别。希望这能有所帮助。
发布于 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
复制相似问题