本文主要包括:
- pytorch 实现的损失函数
pytorch实现的loss function
神经网络主要实现分类以及回归预测两类问题,对于回归问题,主要讲述均方损失函数,而对于一些回归问题,需要根据特殊情况自定义损失函数。对于分类,主要讲述二分类交叉熵和多分类交叉熵函数
在讲解函数之前,提前说一下:
- 所有的loss的基类是Module,所以使用loss的方法是:
# 1. 创建损失函数对象,并指定返回结果,默认为:平均值 以MSE为例
criterion = MSELoss(reduction='...')
# 2. 定义input x, traget y
x = torch.tensor(...)
y = torch.tensor(...)
# 计算损失函数
loss = criterion(x, y)
- 在pytorch 0.4中,参数
size_average
和reduce
已被舍弃,使用reduction
参数控制损失函数的输出行为。
- reduction (string, optional)
- ‘none’: 不进行数据降维,输出为向量
- ‘elementwise_mean’: 将向量中的数累加求和,然后除以元素数量,返回误差的平均值
- ‘sum’: 返回向量的误差值的和
1. class torch.nn.MSELoss(size_average=None, reduce=None, reduction='elementwise_mean')
计算输入x和标签y,n个元素平均平方误差(mean square error),x和y具有相同的Size
损失函数如下定义:
ℓ ( x , y ) = L = { l 1 , … , l N } ⊤ , l n = ( x n − y n ) 2 \ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = ( x_n - y_n )^2 ℓ(x,y)=L={
l1,…,lN}⊤,ln=(xn−yn)2
如果reduction != ‘none’:
ℓ ( x , y ) = { mean ( L ) , if    reduction = ’elementwise_mean’ , sum ( L ) , if    reduction = ’sum’ . \ell(x, y) = \begin{cases} \operatorname{mean}(L), & \text{if}\; \text{reduction} = \text{'elementwise\_mean'},\\ \operatorname{sum}(L), & \text{if}\; \text{reduction} = \text{'sum'}. \end{cases} ℓ(x,y)={
mean(L),sum(L),