本文主要包括:
- 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),ifreduction=’elementwise_mean’,ifreduction=’sum’<

本文详细介绍了PyTorch中的几种损失函数,包括MSELoss用于回归问题,以及BCELoss和CrossEntropyLoss用于分类问题。还探讨了交叉熵损失函数的原理,并给出了不同reduction参数下的计算示例。同时,讨论了如何处理one_hot编码的目标变量,并提供了自定义实现CrossEntropyLoss的示例。
最低0.47元/天 解锁文章
2226

被折叠的 条评论
为什么被折叠?



