经过一些时代迁移学习后,验证损失增加

Posted

技术标签:

【中文标题】经过一些时代迁移学习后,验证损失增加【英文标题】:Validation loss goes up after some epoch transfer learning 【发布时间】:2021-06-13 09:32:46 【问题描述】:

我的验证损失在前 50 个 epoch 以良好的速度下降,但在那之后的 10 个 epoch 验证损失停止下降。我正在使用 mobilenet 并冻结图层并添加我的自定义头部。我的自定义头像如下:

def addTopModelMobileNet(bottom_model, num_classes):

top_model = bottom_model.output
top_model = GlobalAveragePooling2D()(top_model)
top_model = Dense(64,activation = 'relu')(top_model)
top_model = Dropout(0.25)(top_model)
top_model = Dense(32, activation = 'relu')(top_model)
top_model = Dropout(0.10)(top_model)
top_model = Dense(num_classes, activation = 'softmax')(top_model)

return top_model

我使用 alpha 0.25,学习率 0.001,衰减学习率 / epoch,nesterov 动量 0.8。我也在使用 earlystoping 回调,耐心等待 10 个 epoch。

【问题讨论】:

【参考方案1】:

几乎可以肯定,每次我训练深度神经网络时都会遇到这种情况:

您可以摆弄参数,使它们对权重的敏感度降低,即它们不会改变已经“接近最佳”的权重。其中一些参数可能包括优化器的 alpha,尝试逐渐降低它。动量也会影响权重的变化方式。

您甚至可以逐渐减少辍学人数。

【讨论】:

对不起,我是新手,您能否更具体地了解如何逐渐减少辍学。 是的,尝试使用不同的 dropout 值并行训练你的神经网络的不同实例,因为有时我们最终会设置比要求更大的 dropout 值。继续尝试,这是每个人都会做的:)【参考方案2】:

这种现象称为过拟合。在大约 70 个 epoch 时,它以明显的方式过度拟合。

这些背后有几个原因。

    数据:请先分析您的数据。平衡不平衡的数据。如果数据的变化很差,请使用增强。

    Layer tune:尝试进一步调整 dropout 超参数。我建议您也尝试添加 BatchNorm 层。

    最后,尝试将学习率降低到 0.0001 并增加 epoch 的总数。此时不要使用 EarlyStopping。查看训练历史。有时由于一些奇怪的局部最小值而无法达到全局最小值。

【讨论】:

问题是数据来自两个不同的来源,但我也平衡了应用增强的分布。我在图像生成器中对图像进行了标准化,所以我应该使用 batchnorm 层吗?好的将减少 LR 并且不使用提前停止和通知。您能否更具体地了解辍学情况。 我真的很抱歉这么晚才回复。 1. 是的,仍然请使用批量规范层。 2. 从较高的比率开始退出率。然后根据模型的性能降低它。 在我搜索回调但找不到任何信息的固定时期后,我如何减少辍学,请您详细说明。 实际上,您无法在训练期间更改辍学率。您可以更改 LR,但不能更改模型配置。我说的是改变辍学后的再培训。 太棒了。如果有帮助,请接受此答案。

以上是关于经过一些时代迁移学习后,验证损失增加的主要内容,如果未能解决你的问题,请参考以下文章

手把手写深度学习(12):CycleGANs伟大的风格迁移理论基础篇

验证损失不断减少,而训练损失在 3 个 epoch 后开始增加

如何解释模型学习曲线(训练和验证数据的时代准确率和损失曲线)?

验证损失和验证准确率均高于训练损失,且ACC和波动

精度随着时代的增加而降低

深度学习与图神经网络核心技术实践应用高级研修班-Day4图像风格迁移(Neural_sytle_transfer)