PyTorch学习笔记:nn.L1Loss——L1损失
torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')
功能:创建一个绝对值误差损失函数,即L1损失:
l
(
x
,
y
)
=
L
=
{
l
1
,
…
,
l
N
}
T
,
l
n
=
∣
x
n
−
y
n
∣
l(x,y)=L=\{l_1,\dots,l_N\}^T,l_n=|x_n-y_n|
l(x,y)=L={l1,…,lN}T,ln=∣xn−yn∣
其中,
N
N
N表示batch size。
函数图像:
输入:
size_average
与reduce
已经被弃用,具体功能可由reduction
替代reduction
:指定损失输出的形式,有三种选择:none
|mean
|sum
。none
:损失不做任何处理,直接输出一个数组;mean
:将得到的损失求平均值再输出,会输出一个数;sum
:将得到的损失求和再输出,会输出一个数
注意:
- 输入的 x x x与 y y y可以是任意维数的数组,但是二者形状必须一致
代码案例
对比reduction
不同时,输出损失的差异
import torch.nn as nn
import torch
x = torch.rand(10, dtype=torch.float)
y = torch.rand(10, dtype=torch.float)
L1_none = nn.L1Loss(reduction='none')
L1_mean = nn.L1Loss(reduction='mean')
L1_sum = nn.L1Loss(reduction='sum')
out_none = L1_none(x, y)
out_mean = L1_mean(x, y)
out_sum = L1_sum(x, y)
print(x)
print(y)
print(out_none)
print(out_mean)
print(out_sum)
输出
# 用于输入的x
tensor([0.8597, 0.0679, 0.6531, 0.5442, 0.9690, 0.1412, 0.1161, 0.6927, 0.2017, 0.3142])
# 用于输入的y
tensor([0.2538, 0.2823, 0.7768, 0.6710, 0.4303, 0.7249, 0.5897, 0.0048, 0.4121, 0.8169])
# 当reduction设置为none时,输出一个数组
# 该数组上的元素为x,y对应每个元素的绝对值损失,即对应元素做差求绝对值
tensor([0.6059, 0.2143, 0.1237, 0.1268, 0.5387, 0.5837, 0.4737, 0.6879, 0.2103, 0.5027])
# 当reduction设置为mean时,输出所有损失的平均值
tensor(0.4068)
# 当reduction设置为sum时,输出所有损失的和
tensor(4.0677)
注:绘图程序
import torch.nn as nn
import torch
import numpy as np
import matplotlib.pyplot as plt
loss = nn.L1Loss(reduction='none')
x = torch.tensor([0]*100)
y = torch.from_numpy(np.linspace(-3,3,100))
loss_value = loss(x,y)
plt.plot(y, loss_value)
plt.savefig('L1Loss.jpg')
官方文档
nn.L1Loss:https://pytorch.org/docs/stable/generated/torch.nn.L1Loss.html#torch.nn.L1Loss
初步完稿于:2022年1月29日