卷积神经网络产生偏差预测

时间:2016-05-09 07:17:46

标签: machine-learning computer-vision neural-network deep-learning conv-neural-network

我正在训练卷积神经网络,将图像分为五类(第1类 - 第5类)。

我很少有针对第1类的训练图像,所以我通过随机裁剪并翻转图像来创建更多数据来执行一些数据增强。我有至少3000个2级到5级的训练图像。现在,我的训练集由每个级别的3000个图像组成,我使用随机梯度下降训练它。

我的测试集包括:

Class 1 - 8 images
Class 2 - 83 images
Class 3 - 227 images
Class 4 - 401 images
Class 5 - 123 images

我的网络正确预测:

Class 1 - 0 images
Class 2 - 0 images
Class 3 - 0 images
Class 4 - 399 images
Class 5 - 0 images

考虑到我的训练集的局限性,我不希望得到一个非常准确的网络,而且15000张图像可能还不够 - 但我认为它不会如此偏斜,因为2 - 5级有相同数量的不同训练图像。如果我用更大比例的4级图像训练我的网络,那么这不会让我感到惊讶。我原本期望网络能够正确地预测其他几个类。

有什么想法吗?

修改

图片类型:建筑物

网络架构:

Input image - 256 x 256 x 3
Convolutional layer - 15 x 15 filters, 16 filters
Max 2x2 pooling layer
Convolutional layer - 11 x 11 filters, 32 filters
Max 2x2 pooling layer
Convolutional layer - 7 x 7 filters, 64 filters
Max 2x2 pooling layer
Fully connected layer - 1024 outputs
Softmax classifier layer - 5 outputs

成本函数:交叉熵

2 个答案:

答案 0 :(得分:0)

这可能发生(尽管不是很常见)。我觉得你训练的时间不够长。 CNN尝试正确地一次获得一个类,如果你没有规范化损失,通常是具有最大样本数的类。这是因为它在开始时正确预测该类可以获得最大的好处。随着时间越来越好,它不再获得这种好处,然后尝试正确地预测其他类。

您可以根据班级频率对softmax损失进行加权,或重新采样数据集以解决此问题。我还看到你的CNN不够深,滤镜尺寸不适合你的分辨率,训练样本的数量太少。我建议你微调一些预先训练好的神经网络,如VGG,GoogLeNet,ResNet或AlexNet,以便完成任务。

对于caffe,您可以按照此示例http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html

答案 1 :(得分:0)

我觉得我回答得很晚,但我愿意分享我的经验/知识。 :)

在实践中,建议最多使用3x3和5x5这样的小过滤器尺寸,因为与15x15等相比,它们提供的参数更少,减少了训练时间,准确性没有差异。已有研究(参见ImageNet竞赛获胜者2013-2015)。

一方面,你的模型偏向于一个类的一个可能原因是因为它们不平衡。您可以做的是惩罚模型,使其更偏向具有较小实例的类。在Keras中,有一个class_weight参数,允许您缩放丢失函数。

1 - Sequential - Keras

2- How to set class weights for imbalanced classes in Keras?