我正在训练一个卷积神经网络,将一幅图像分类为五类之一(1-5级)。
我几乎没有一班的训练图像,所以我做了一些数据增强,采取随机作物和翻转图像,以创造更多的数据。我至少有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成本函数:交叉熵
发布于 2016-05-09 21:31:01
这是可以发生的(虽然不是很常见)。我想你训练的时间还不够长。CNN试图一次正确地得到一个类别,这通常是一个样本数最大的一个,如果你没有标准化损失。这是因为它从一开始就正确地预测这个类中得到了最大的好处。随着时间的推移,它变得越来越好,它不再得到这种好处,然后也试图正确地预测其他类。
您可以根据类频率来加权您的softmax损失,或者重新采样您的数据集以避免这个问题。我也看到你的CNN不够深,滤镜尺寸不适合你的分辨率,训练样本的数量也太少。我建议你微调一些预先训练好的神经网络,如VGG、GoogLeNet、ResNet或AlexNet。
对于caffe,您可以遵循下面的示例,style.html
发布于 2016-10-04 00:51:21
我想我已经很晚才给出答案,但我愿意分享我的经验/知识。:)
在实践中,建议最大限度地使用3x3和5x5等小滤波器,因为它们提供了较小的参数,与15x15等相比,这些参数减少了训练时间,准确性没有差别。对此进行了研究(见2013-2015年ImageNet竞赛获奖者)。
一方面,您的模型偏袒一个类的一个可能原因是它们不平衡。您所能做的就是惩罚该模型,使其更偏向于具有较小实例的类。在Keras中,有一个class_weight参数,允许您缩放损失函数。
1- 序贯Keras
https://stackoverflow.com/questions/37109804
复制相似问题