教程前四章的打卡记录:深入迁出pytorch专栏
该教程的GitHub地址:深入浅出PyTorch
哔哩哔哩视频地址:深入浅出Pytorch
DataWhale“深入浅出PyTorch”第六章—— PyTorch进阶训练技巧
文章目录
1. 自定义损失函数
现状及重要性:
- 官方损失函数:的PyTorch在torch.nn模块为我们提供了许多常用的损失函数,比如:MSELoss,L1Loss,BCELoss…
- 非官方的损失函数:随着深度学习的发展,出现了越来越多的非官方提供的Loss,比如DiceLoss,HuberLoss,SobolevLoss…这些Loss Function专门针对一些非通用的模型,PyTorch不能将他们全部添加到库中去,因此这些损失函数的实现则需要我们通过自定义损失函数来实现。
- 新的损失函数:另外,在科学研究中,我们往往会提出全新的损失函数来提升模型的表现,这时我们既无法使用PyTorch自带的损失函数,也没有相关的博客供参考,此时自己实现损失函数就显得更为重要了。
1.1 以函数的方式定义
直接以函数定义的方式定义一个自己的函数,例如下面的平方损失函数:
def my_loss(output, target):
loss = torch.mean((output - target)**2)
return loss
1.2 以类的方式定义
虽然以函数定义的方式很简单,但是以类方式定义更加常用,在以类方式定义损失函数时,我们如果看每一个损失函数的继承关系我们就可以发现Loss
函数部分继承自_loss
, 部分继承自_WeightedLoss
, 而_WeightedLoss
继承自_loss
,_loss
继承自 nn.Module。下面以DiceLoss为例。
Dice Loss是一种在分割领域常见的损失函数,定义如下:
D S C = 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ DSC = \frac{2|X∩Y|}{|X|+|Y|} DSC=∣X∣