1 L1_loss
- 定义:计算对应位置的绝对值,求平均。又称绝对值损失函数
- 公式:
a = [ x 1 , x 2 , x 3 . . . x n ] 、 b = [ y 1 , y 2 , y 3 . . . y n ] a=[x_1,x_2,x_3...x_n]、b=[y_1,y_2,y_3...y_n] a=[x1,x2,x3...xn]、b=[y1,y2,y3...yn]
L 1 ( a , b ) = 1 n ∑ i = 1 n ∣ x i − y i ∣ L1(a,b)=\frac{1}{n}\sum_{i=1}^n|x_i-y_i| L1(a,b)=n1∑i=1n∣xi−yi∣ - 代码实现:
import torch.nn as nn
import torch.nn as nn
import torch
#loss function
loss = nn.L1Loss()
a=torch.FloatTensor([1,2,3])
b=torch.FloatTensor([1.1,2.2,2.9])
output = loss(a, b)
print(output)
c=torch.FloatTensor([[1,3],[2,3],[1,1]])
print(f"c_shape:{c.shape}")
d=torch.FloatTensor([[2,3.2],[2.1,3.2],[1.1,1.1]])
print(f"c_shape:{d.shape}")
out=loss(c,d)#除以6,不是除以3!
print(out)
2 Lpips_loss
感知损失,符合人眼的损失
输入网络提取特征,计算L2距离,算平均。
class LpipsLoss(nn.Module):
def __init__(self):
super(LpipsLoss, self).__init__()
self.lpips_fn = lpips.LPIPS(net='vgg')#加载预训练的模型
self.lpips_fn.net.requires_grad_(False)
def forward(self, gt, output):
output = output*2.-1
gt = gt*2.
lpips_loss = torch.mean(self.lpips_fn(output, gt))
return lpips_loss
3 PSNR
全称:peak signal-to-Noise Ratio 峰值信噪比
定义:
给定大小为 n ∗ m n*m n