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使用损失函数的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记Pytorch十二损失函数与反向传播

无法在pytorch python中使用多目标损失函数

如何在 PyTorch 中添加自定义定位损失函数?

Pyotorch自定义损失函数

Pytorch:损失函数

PyTorch 中自定义后向函数的损失 - 简单 MSE 示例中的爆炸损失