为什么我的验证损失小于训练损失?

问题描述 投票:0回答:2

在训练深度卷积自动编码器时,我一直得到比验证损失更高的训练损失。请注意,在我的火车数据生成器中,我正在使用 Keras zoom_range 进行数据扩充。如果我提高 [0.8-4]、[0.8,6] 等缩放范围,训练和验证损失之间的差距会不断增加。 是因为训练损失是根据增强数据计算的吗?假设更多的增强会使模型更难预测(重建)输入图像。还是我的训练方法有问题?我也附上了训练命令的代码片段。

checkpoint = ModelCheckpoint(model_save_dir, monitor='val_loss', save_best_only=False, mode='min')
callbacks_list = [checkpoint]

history = model.fit(train_generator, validation_data=val_generator, epochs=n_epochs, shuffle=True, callbacks=callbacks_list)

tensorflow keras deep-learning autoencoder loss
2个回答
1
投票

随着数据增强效果的增加,你的训练损失似乎增加了,基本上这是因为模型学习模式的难度太大了。
在我看来,数据扩充的目标是对初始数据进行真实的更改,以像正则化技术一样提高模型的稳健性。

然而,验证损失保持不变,所以我认为学习阶段的效率不会受到太大影响。我将确保标签的分布是同质的,并且来自 train/val 的数据是分层的。我还将制作一个测试集(没有任何数据扩充,例如验证集)以使比较更有价值。


0
投票

我认为你绝对犯了一些错误。删除您的正则化并再次计算您的损失。检查您的验证集和训练集是否重叠。如果是,则清理。另一种可能性是您的标签是否正确。以前发生在我身上,我花了几周时间才发现我的标签弄乱了。

© www.soinside.com 2019 - 2024. All rights reserved.