损失函数调整4
损失函数并不是一成不变的,对应特定项目可能有各种损失函数合适。
均方误差(MSE):计算的是预测值与目标值之间差值的平方和的平均值,适用于回归问题。
交叉熵损失:衡量的是概率分布之间的差异,常用于分类问题。
Dice损失:基于Dice系数,计算的是两个集合之间的相似度。
Dice损失相比MSE方法的特点:直接考虑了正负样本的比例,对类别不平衡的数据集更加鲁棒。它通过交集与并集之比来评估模型性能,因此对于少数类别的表现更为关注。
Dice损失特别适用于图像分割任务,因为它直接优化的是预测结果与实际标记区域之间的重叠程度,而不是单纯的像素级别的误差或概率分布差异。
在医学影像分析等领域,往往存在严重的类别不平衡问题(例如背景像素远多于前景病变区域)。Dice损失能够更好地处理这种情况,因为它不仅考虑到了正确预测的部分,还考虑到了错误预测的影响。
其他几种loss-function的研究方向
BCE-Dice Loss:特别适用于图像分割任务,尤其是在医学影像分析等存在严重类别不平衡的任务中表现优异。
Jaccard/IoU Loss:主要用于图像分割任务,特别是当需要精确地评估模型在不同大小物体上的表现时。
Focal Loss:广泛应用于对象检测和分类任务,特别是在处理具有大量背景样本和少量前景样本的情况时表现出色。
一些常用的学习率相关文献
StepLR 和 MultiStepLR 适合需要定期手动降低学习率的情况。
ExponentialLR 提供了一种平滑的学习率衰减方式。
CosineAnnealingLR 有助于模型跳出局部最优解,尤其是在长时间训练中。
ReduceLROnPlateau 根据验证集的表现动态调整学习率,非常灵活且易于使用。
CyclicLR 可以加速收敛,并有助于找到更好的权重更新步长。
在每个epoch中:
调用 train_one_epoch 进行训练。
调用 validate 获取当前模型在验证集上的损失。
使用 scheduler.step(val_loss) 根据验证集的损失调整学习率。
注:
我们在使用官方给出的torch.optim.lr_scheduler时,需要将scheduler.step()放在optimizer.step()后面进行使用。
微调的相关原理
(1)下载预训练相关权重。
(2)冻结所有参数
(3)替换最后的全连接层
(4)定义损失函数和优化器
@autocast() 装饰器被应用于 forward 方法,表示在这个方法内部执行的操作将自动应用自动混合精度策略。
在 forward 方法内部的所有张量运算都会根据需要自动转换为 FP16 或 FP32,而不需要手动进行类型转换。