【问题标题】:Convolutional neural network making skewed predictions卷积神经网络进行倾斜预测
【发布时间】:2016-09-03 17:40:08
【问题描述】:

我正在训练一个卷积神经网络,将图像分类为五个类别之一(第 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

成本函数:交叉熵

【问题讨论】:

  • 有一个特定的数据科学堆栈交换 - 也许你的问题会更好?
  • 你应该描述你的卷积网络的架构以及你正在分类的对象。
  • @user3791372 感谢您为我指明方向!
  • @EliKorvigo 我也添加了这些。谢谢!
  • 分类偏斜与使用卷积无关。请报告:训练集的确切大小。训练错误(关键部分)。使用的训练方法。附带说明 - 考虑到输入的大小,您的网络看起来非常简单(小)。

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


【解决方案1】:

这可能发生(虽然不是很常见)。我认为你训练的时间不够长。 CNN 尝试一次正确地获取一个类,如果您没有对损失进行归一化,这通常是具有最大样本数的类。这是因为它从一开始就正确预测该类中获得了最大的收益。随着时间的推移它变得越来越好,它不再获得这种好处,然后也试图正确地预测其他类。

您可以根据类频率对您的 softmax 损失进行加权,或者重新采样您的数据集来解决这个问题。我还看到您的 CNN 不够深,过滤器大小不适合您拥有的分辨率,并且训练样本的数量太少。我建议您针对您的任务微调一些预训练的神经网络,例如 VGG、GoogLeNet、ResNet 或 AlexNet。

对于 caffe,你可以按照这个例子,http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html

【讨论】:

  • 感谢您的 cmets 和链接!我重新采样了我的数据集以获得更多的 1 类图像。但你是对的——我的网络训练的时间不够长,所以现在它基本上是在预测它看到的最后一堂课!您能帮我了解一下我的网络应该大概有多深以及过滤器大小合适吗?
【解决方案2】:

我认为我给出答案已经很晚了,但我愿意分享我的经验/知识。 :)

在实践中,建议最大使用 3x3 和 5x5 等较小的过滤器尺寸,因为与 15x15 等相比,这些过滤器提供的参数较少,可以减少训练时间,但准确度没有差异。对此已有研究(请参阅 2013-2015 年 ImageNet 竞赛获奖者)。

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

1 - Sequential - Keras

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

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 2015-04-15
    • 2017-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    相关资源
    最近更新 更多