经过一些时代迁移学习后,验证损失增加
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 后开始增加