如何教卷积神经网络对未知图像说“不”?
Posted
技术标签:
【中文标题】如何教卷积神经网络对未知图像说“不”?【英文标题】:How to teach a convolutional neural network to say "no" to unknown images? 【发布时间】:2018-08-20 21:12:06 【问题描述】:我的任务是识别字符。有一定的数据集。当我提交不是来自该数据集的输入符号(或来自一个图像中的数据集的一组字符)时,神经网络会选择最相似的符号。在这种情况下,网络应该说她不知道这样的符号。 这个任务可能有任何架构吗?
我正在使用 Keras(Tensorlow 作为后端)在 Python 3 中编写代码。
我的架构:
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 29, 29, 75) 1275
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 14, 14, 75) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 14, 14, 75) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 11, 11, 100) 120100
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 5, 5, 100) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 5, 5, 100) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 2, 2, 125) 200125
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 1, 1, 125) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 1, 1, 125) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 125) 0
_________________________________________________________________
dense_1 (Dense) (None, 500) 63000
_________________________________________________________________
dropout_4 (Dropout) (None, 500) 0
_________________________________________________________________
dense_2 (Dense) (None, 69) 34569
【问题讨论】:
所以你想用一个不适合任何其他类的附加“背景”类进行分类? @FlyingTeller,是的 虽然这也可能是架构问题,但主要挑战是为这个背景类提供数据,因为它可以有多种形式。但是,您可以做的是为您的输出引入后处理:取一个阈值,假设为 0.6,如果 output_j > 0.6,则网络预测类j
。如果没有类别达到此阈值,则预测为“背景”。这可能会处理一张图片中的多个字符
@FlyingTeller,我设置了阈值,但有时网络给出错误符号的概率非常高(超过 0.9)
【参考方案1】:
最好的方法是:
使用数据集中的附加图像,对应于“未知”类,您可以通过对看起来像符号的字符图像进行采样来获得它。然后为“n+1”类训练模型,其中“n”是您当前正在处理的类数。
仔细查看 softmax 输出并启发式地选择一个阈值。
【讨论】:
以上是关于如何教卷积神经网络对未知图像说“不”?的主要内容,如果未能解决你的问题,请参考以下文章
第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用