3 个超参数的哪种组合可以对抗卷积神经网络的过度拟合?

数据挖掘 过拟合 超参数调整 卷积神经网络 网格搜索 网格搜索
2022-03-09 15:35:20

我有一个小数据集,我想通过使用数据增强来训练 CNN。由于 CNN 由于数据集小而过拟合,我想优化一些超参数。但是,由于我想为此使用 Scikit-Learn 的 GridSearchCV,因此由于减少了计算时间,我只想优化 3 个超参数。这里出现的问题是我应该使用哪种超参数组合进行网格搜索?

我目前的方法是优化学习率、dropout 层率和 epoch 数。

我选择学习率是因为 Goodfellow 的《深度学习》一书建议始终优化学习率。但我不确定我的调优超参数组合是否真的很好。

你会推荐什么组合?非常感谢每一个提示

我以前的架构师如下:

model = Sequential()
model.add(Conv2D(32,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(32,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2))
model.add(Dropout(0.2))

model.add(Conv2D(64, (3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(64,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2))
model.add(Dropout(0.2))

model.add(Flatten())

model.add(Dense(512))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))
model.add(Dense(10))
model.add(Activation('softmax'))

作为优化器,我使用 Adam。

1个回答

如果您特别询问过度拟合,我只会从您的三个列表中保留辍学率。其他两个可以选自:卷积层中的过滤器数量、卷积数量、密集层数量(如果有)、密集层中的神经元数量。

应该优化学习率,但不是为了对抗过度拟合,至少我理解的方式是这样。使用 Keras,您可以从一些学习率开始 - 不一定是非常精细的调整,一旦训练达到平台期,您可以使用Callbacks中的Learning Rate Scheduler慢慢降低它。此外,还有一些方法可以找到最佳学习率,例如learning rate finder,因此使用网格搜索优化学习率可能会滥用资源(不过我从未使用过它们!)。

您还可以使用上述回调页面中的模型检查点来保存模型,因为验证损失只会有所改善,并忽略后期过度拟合成为问题的时期。这样,您就不需要在搜索中包含时期数。