CNNs - 使用同一数据集的不同训练大小进行超参数调整

数据挖掘 美国有线电视新闻网 超参数调整 网格搜索 网格搜索 微调
2022-03-13 10:08:58

我想比较一下 CNN 的分类性能(测试精度)根据数据集的大小而变化的程度。为此,我想使用像 MNIST 或 Fashion MNIST 这样的数据集。

我想首先训练一个只有大约 1000 个图像的子集 ob 的 CNN,然后是一个大约 5000 个图像的子集 ob 的 CNN,然后是大约 10000 个图像的子集等。

对于每个这些数据集,应该生成一个优化的 CNN。

我目前的计划如下:

  1. 创建一个简单的基础模型,它只有 1 个 Conv 层(带有 32 个过滤器)、MaxPooling2D、Dropout (0.5) 和一个包含大约 100 个神经元的 Dense Layer。
  2. 使用这个基本模型,我将使用 GridSearchCV 搜索最小的数据集(包含 1000 张图像)作为批量大小,并使用优化器搜索所有其他数据集。
  3. 然后我将为每个数据集执行以下操作:

    • 使用 GridSearchCV 搜索网络的最佳架构(Conv 层数、过滤器数、密集层数、密集层中的神经元数)(此时 RandomizedSearchCV 可能不太适合)

    • 搜索学习率、权重衰减、辍学率等(使用 GridSearch 或 RandomizedSearch)。

也许我可以只对一个或另一个不太重要的参数使用默认设置,然后将它们从搜索中排除。

我不确定我的方法是否真的值得推荐。

我也倾向于使用 RandomizedSearchCV 同时确定每个数据集的所有超参数。

非常感谢您的意见和建议。

1个回答

第一个建议:你应该先找到一个让你满意的CNN架构,然后坚持下去。

第二个建议:小心交叉验证。CNN 是非常“重”的模型,它们可以轻松获取数十万或数百万个可训练参数。对这些进行交叉验证在计算上可能是不可能的。

换句话说,将这两个问题分开。

我建议你看看常见的 CNN 架构。在 Kaggle 比赛中有很多(用于 MNIST、Fashion MNIST 或任何其他数据集)。你可以选择一个运行良好的,然后用它来显示 CNN 的分类性能(测试准确率)根据数据集的大小而变化的程度。