这是在做一个比赛的时候遇到的问题,一次偶然的训练发现val loss在几轮训练之后消失了。
图中是我用matplotlib制作的训练100轮的曲线。
数据增广使用了:
transforms.Resize((300, 300))
transforms.RandomHorizontalFlip()
transforms.ToTensor()
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
batch-size为20.
模型使用的是efficientnet-b4.
解决方法:
1.调小batch-size
2.修改模型的激活函数(可以使用relu)
3.修改数据集(也可以修改数据增强)
4.修改损失函数
因为损失函数我选择的是交叉熵损失,所以不做修改,模型也不是我自己搭建的,也没有修改,最后在删除了部分数据增强之后,成功解决了该问题!
但是,最后的val loss变成了0。
这个是因为我的数据集有问题了,因为我的数据集正负样本加起来不到1000张,实际在测试集中的f1-score也不到0.80
这种情况下不建议使用数据增强去增加数据的数量,建议直接修改数据集,是样本多样化,具有广泛性。