【问题标题】:Conv2D and Conv3D: increase the accuracyConv2D 和 Conv3D:提高准确率
【发布时间】:2024-01-18 23:41:01
【问题描述】:

我有 10000 个 18 * 18 像素的 RGB 图像(是的,图像很小),每个 5 个类。我想制作用于将图像分类为 5 个标签的深度学习模型。我分别使用内核 (3,3) 和 (3,3,3) 尝试了 Conv2D 和 Conv3D。我尝试使用不同的过滤器(16、32、64、128、256)添加多个层(最多 8 个)。我尝试了不同的激活器(relu、sigmoid)和优化器(adam、sgd)。我还尝试了 # epochs up to 500。但是,我无论如何都无法获得超过 0.5 的总体准确度。请帮助我如何提高准确性。

【问题讨论】:

  • 图像尺寸非常小,所以我建议大约 2 个 Conv2D 层。尝试降低学习率和亚当优化器。

标签: tensorflow keras deep-learning caffe pytorch


【解决方案1】:

我建议您寻找像“mnist cnn”这样的好例子并将该模型应用于您的数据集。

我认为您需要其他东西,而不仅仅是网络架构。

它可能在下面。

  • 数据增强:旋转、缩放、移位等
  • 初始化:参数初始化(权重、偏差)
  • 批量规范
  • 辍学
  • 按纪元衰减的学习率

【讨论】:

  • 我也使用了 VGG16 网络架构(没有模型权重,因为它是为 imagenet 数据集训练的,我正在为自己的图像工作),但没有任何改进。
  • 我认为使用 VGG16 网络不是好方法,因为 VGG16 架构太大,无法应用您的图像(18x18 输入)。 mnist 图像比你的大 28x28 大小,使用我上面提到的几种技术的几个 conv 层就足够了。
  • @user10772275 不,VGG16 甚至不接受 18*18 输入。
【解决方案2】:

首先尝试增加每个类的数据样本(尝试收集真正的新数据,然后将它们全部增加) 即使您的数据与使用最先进的预训练模型(例如移动网络 v2 或 Xceptoin)作为初始权重的 imagenet 类不相似,并通过您的数据对其进行微调 如果您的样本类似于 imagenet,您可以冻结第一层并仅在模型结束时训练密集层。

【讨论】:

    【解决方案3】:

    这是我的两分钱:

    • 就模型架构而言,从简单的开始,并在必要时增加容量(层过滤器)。
    • 根据我的经验,优化器的学习率影响最大。因此,首先保持所有其他参数不变并找到一个好的学习率是一个好的开始。
    • 使用 Adam,它对不良学习率不太敏感。
    • 一开始实际上不需要对数据使用花哨的增强、丢失或权重正则化。这些方法用于帮助您的模型防止过度拟合。由于您被困在 0.5 的准确度上,因此您并没有真正过度拟合。
    • 批量归一化可以为 CNN 创造奇迹。
    • 如果您的数据不平衡,请尝试使用加权损失。

    上面提到的一些观点(以及更多观点)摘自 Andrej Karpathy 名为 A recipe for training neural networks 的博客文章。

    【讨论】: