经过一段时间的迁移学习后,验证损失上升
Validation loss goes up after some epoch transfer learning
我的验证损失在前 50 个时期以良好的速度下降,但在那之后的十个时期验证损失停止下降。我正在使用 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 momentum 0.8。我也在使用 earlystoping 回调,耐心等待 10 个纪元。
这种现象称为过拟合。在大约 70 个时期,它以明显的方式过拟合。
这些背后有几个原因。
数据:请先分析你的数据。平衡不平衡的数据。如果数据的变化很差,请使用扩充。
Layer tune:尝试稍微调整 dropout hyper param。我建议您也尝试添加 BatchNorm 层。
最后,尝试将学习率降低到0.0001,并增加epochs的总数。此时不要使用 EarlyStopping。查看培训历史。有时由于一些奇怪的局部最小值而无法达到全局最小值。
我每次训练深度神经网络时几乎肯定会遇到这种情况:
您可以 fiddle 调整参数,使它们对权重的敏感度降低,即它们不会改变已经“接近最佳”的权重。其中一些参数可能包括优化器的 alpha,尝试逐渐减少它。动量也会影响权重的变化方式。
你甚至可以逐渐减少辍学的人数。
我的验证损失在前 50 个时期以良好的速度下降,但在那之后的十个时期验证损失停止下降。我正在使用 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 momentum 0.8。我也在使用 earlystoping 回调,耐心等待 10 个纪元。
这种现象称为过拟合。在大约 70 个时期,它以明显的方式过拟合。
这些背后有几个原因。
数据:请先分析你的数据。平衡不平衡的数据。如果数据的变化很差,请使用扩充。
Layer tune:尝试稍微调整 dropout hyper param。我建议您也尝试添加 BatchNorm 层。
最后,尝试将学习率降低到0.0001,并增加epochs的总数。此时不要使用 EarlyStopping。查看培训历史。有时由于一些奇怪的局部最小值而无法达到全局最小值。
我每次训练深度神经网络时几乎肯定会遇到这种情况:
您可以 fiddle 调整参数,使它们对权重的敏感度降低,即它们不会改变已经“接近最佳”的权重。其中一些参数可能包括优化器的 alpha,尝试逐渐减少它。动量也会影响权重的变化方式。
你甚至可以逐渐减少辍学的人数。