损失函数
- 写在前面
- 一、Charbonnier损失
- 二、SSIM损失
* - 1.结构相似性(SSIM:Structural Similartiy)
- 2.平均结构相似性(Mean SSIM)
- 3.代码实现
- 4.测试案例
- 参考:
写在前面
下面介绍各个函数时,涉及到一下2变量,其含义如下:假设网络输入为x,输出为y ‾ \overline{\text{y}}y =f(x),x的真实标签为y,其中:
上述定义中的N通常表示一个批次中所包含的样本数量,因为在网络训练时我们通常是逐批次送入网络训练,每个批次计算一次损失,然后进行参数更新。
; 一、Charbonnier损失
参考文章链接:http://xxx.itp.ac.cn/pdf/1710.01992
参考文章适用于图像超分辨任务,对于普通的有监督任务,Charbonnier Loss可定义为如下形式:
其中,
主要看一下(-1,1)这个区间内Charbonnier Loss的曲线,我们知道L1损失存在不可导点y-y_=0(见https://blog.csdn.net/qq_43665602/article/details/127037761),而Charbonnier Loss通过引入常量epslion解决了L1的缺陷,曲线在y-y_接近0的地方也可导。在此区间之外,该函数曲线近似L1损失,相比L2损失而言,对异常值不敏感,避免过分放大误差。
1)代码实现
class CharbonnierLoss(nn.Module):
def __init__(self,epsilon=1e-3):
super(CharbonnierLoss, self).__init__()
self.epsilon2=epsilon*epsilon
def forward(self,x):
value=torch.sqrt(torch.pow(x,2)+self.epsilon2)
return torch.mean(value)
creation=CharbonnierLoss()
loss=creation(y_-y)
print(loss)
`python
tensor([[6., 6., 6., 8., 3., 6., 6., 7., 0., 5.],
[6., 9., 7., 1., 5., 5., 6., 2., 7., 0.],
[0., 4., 4., 6., 9., 1., 1., 4., 6., 0.],
[8., 5., 8., 1., 7., 5., 9., 1., 4., 7.]])
tensor([[9., 4., 9., 7., 5., 5., 5., 4., 9., 6.],
[5., 4., 8., 8., 3., 2., 7., 4., 2., 8.],
[2., 1., 5., 3., 1., 1., 3., 9., 5., 9.],
[8., 8., 1., 0., 1., 5., 9., 8., 9., 0.]])
Original: https://blog.csdn.net/qq_43665602/article/details/127041832
Author: NorthSmile
Title: 【损失函数:2】Charbonnier Loss、SSIM Loss(附Pytorch实现)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/708868/
转载文章受原作者版权保护。转载请注明原作者出处!