4.6 PyTorch使用损失函数
Posted 王小小小草
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.6 PyTorch使用损失函数相关的知识,希望对你有一定的参考价值。
欢迎订阅本专栏:《PyTorch深度学习实践》
订阅地址:https://blog.csdn.net/sinat_33761963/category_9720080.html
- 第二章:认识Tensor的类型、创建、存储、api等,打好Tensor的基础,是进行PyTorch深度学习实践的重中之重的基础。
- 第三章:学习PyTorch如何读入各种外部数据
- 第四章:利用PyTorch从头到尾创建、训练、评估一个模型,理解与熟悉PyTorch实现模型的每个步骤,用到的模块与方法。
- 第五章:学习如何利用PyTorch提供的3种方法去创建各种模型结构。
- 第六章:利用PyTorch实现简单与经典的模型全过程:简单二分类、手写字体识别、词向量的实现、自编码器实现。
- 第七章利用PyTorch实现复杂模型:翻译机(nlp领域)、生成对抗网络(GAN)、强化学习(RL)、风格迁移(cv领域)。
- 第八章:PyTorch的其他高级用法:模型在不同框架之间的迁移、可视化、多个GPU并行计算。
PyTorch提供了许多常用的损失函数,再前面小节中也有用到过了。损失函数可以在torch.nn.functional中调用。
再日常模型训练中,最常见的是做回归预测或者做分类,下面分别介绍它们的常用损失函数的用法。
其他损失函数的用法是一样的。可以再这份博客里看看各类损失的含义:https://www.cnblogs.com/kk17/p/10246324.html
4.6.1 适用于回归的损失函数
- mse_loss 误差的平方
- l1 误差的绝对值
注意可以通过reduction这个参数配置是均值、求和还是不进行聚合。
import numpy as np
import torch
import torch.nn.functional as F
# # 适用于回归的损失: mse, l1
p = torch.Tensor(np.array([[1, 2], [3, 4]]))
y = torch.Tensor(np.array([[1,4], [2,4]]))
loss_mse = torch.nn.MSELoss(reduction='elementwise_mean' )
loss_l1 = torch.nn.L1Loss(reduction='elementwise_mean' )
print(loss_mse(p, y))
print(loss_l1(p,y))
tensor(1.2500)
tensor(0.7500)
4.6.2 适用于分类的损失函数
注意以下两种方式以后经常会遇到。
# # 使用与分类的损失:
p = torch.ones(3, 5, requires_grad=True) # 3个样本,5个label
y = torch.Tensor([1, 0, 4]).type(torch.LongTensor) # 3个样本对应的true label
# 方式1
log_softmax = F.log_softmax(p, dim=1) # 先进过log softmax
loss1 = F.nll_loss(log_softmax, y)
print(loss1.data)
# 方式2(等价于方式1)
loss2 = F.cross_entropy(p, y)
print(loss2.data)
tensor(1.6094)
tensor(1.6094)
以上是关于4.6 PyTorch使用损失函数的主要内容,如果未能解决你的问题,请参考以下文章