卷积神经网络训练

时间:2017-11-17 10:20:47

标签: tensorflow machine-learning neural-network conv-neural-network training-data

我对卷积神经网络(CNN)训练有疑问。

我设法使用tensorflow训练网络,该网络接收输入图像(1600像素)并输出与之匹配的三个类别中的一个。

使用受过训练的类的变体测试网络可以获得良好的结果。然而;当我给它一个不同的-thourth-图像(不包含任何经过训练的3图像)时,它总是返回一个类的随机匹配。

我的问题是,我如何训练网络来分类图像不属于三个训练图像中的任何一个?一个类似的例子,如果我针对mnist数据库训练网络,然后给它一个字符“A”或“B”。有没有办法区分输入不属于任何一个类?

谢谢

4 个答案:

答案 0 :(得分:1)

您的模型将始终像您的标签一样进行预测,例如,如果您使用MNIST数据训练模型,当您进行预测时,预测将始终为0-9,就像MNIST标签一样。

您可以做的是首先使用2个类训练不同的模型,您将在其中预测图像是属于数据集A还是B. E.x.对于MNIST数据,您将所有数据标记为1并添加来自其他不同来源(不是0-9)的数据并将其标记为0.然后训练模型以查找图像是否属于MNIST。

答案 1 :(得分:0)

卷积神经网络(CNN)预测训练后定义的类的结果。无论准确性如何,CNN总是从其中一个类返回。我遇到过类似的问题,你能做的就是检查准确性值。如果准确度低于某个阈值,则它属于无类别。希望这会有所帮助。

答案 2 :(得分:0)

您可能有三个输出节点,并选择最大值(一热编码)。这有点不幸,因为它的输出数量很少。未经确认的输入往往会产生相当随机的输出。

现在,有3个输出,粗略地说你可以得到7个结果。您可能获得单个高值(3种可能性),但未识别的输入也可能导致2个高输出(也有3种可能)或大致相等的输出(也有3种可能性)。所以有一个很好的机会(~3 / 7)的随机输入在输出节点上产生一个模式,你只能期望识别输入。

现在,如果您有15个类,因此有15个输出节点,那么您将查看大约32767个未识别输入的可能结果,其中只有15个对应于预期的单一结果。

这是缺乏培训数据的基础。如果您的训练集中有3个类以外的示例,您可以将其转储到第4个“其他”类别中并进行训练。这本身并不是一个可靠的指示,因为通常理论上的“其他”集是巨大的,但是现在你有两种互补的方式来检测其他输入:要么是“其他”输出节点,要么是11个模糊输出中的一个。

答案 3 :(得分:0)

另一种解决方案是检查CNN通常在给出其他内容时会给出什么结果。我相信最后一层必须是softmax,你的CNN应该返回三个给定类的概率。如果这些概率都不接近1,这可能表明这是其他事情,假设您的CNN训练有素(在预测错误标签时必须因过度自信而被罚款)。