PyTorch入门学习(十三):损失函数与反向传播

一、引言

深度学习的核心目标之一是最小化损失函数,以使模型能够更好地适应训练数据。本文将介绍如何在PyTorch中使用损失函数和反向传播来训练深度学习模型。接下来将详细解释提供的代码,并深入探讨交叉熵损失函数、均方误差损失函数以及它们在模型训练中的应用。

二、损失函数的重要性

损失函数是深度学习模型训练的关键组成部分,它定义了模型的性能度量。模型的目标是通过最小化损失函数来找到最佳参数,以便预测与实际观测值(标签)最为接近。

三、使用交叉熵损失函数

在提供的代码中,加载了CIFAR-10数据集,并创建了一个名为Tudui的卷积神经网络模型。接下来使用nn.CrossEntropyLoss()创建了一个交叉熵损失函数的实例。

python 复制代码
loss_cross = nn.CrossEntropyLoss()

这是一种常用于多类别分类问题的损失函数。对于每个样本,它将模型的输出与正确的类别标签进行比较,并计算损失。

python 复制代码
for data in dataloader:
    imgs, labels = data
    outputs = tudui(imgs)
    results = loss_cross(outputs, labels)
    results.backward()
    print(results)

在循环中,迭代数据加载器中的样本,将输入传递给模型,计算损失,然后使用results.backward()执行反向传播。这将计算梯度,以便可以使用梯度下降等优化算法来更新模型参数,从而最小化损失。

四、使用均方误差损失函数

在代码的后半部分,定义了一个示例输入和目标,并创建了L1损失和均方误差(MSE)损失函数的实例。

python 复制代码
inputs = torch.tensor([1, 2, 3], dtype=torch.float32)
targets = torch.tensor([1, 2, 5], dtype=torch.float32)

inputs = torch.reshape(inputs, (1, 1, 1, 3))
targets = torch.reshape(targets, (1, 1, 1, 3))

loss = L1Loss(reduction='sum')
result = loss(inputs, targets)
print(result)

loss_mse = MSELoss()
result_mse = loss_mse(inputs, targets)
print(result_mse)

L1损失是绝对误差损失,它测量了预测值和目标值之间的差异的绝对值之和。而均方误差损失则测量了它们之间的平方差异的平均值。

完整代码如下:

python 复制代码
import torch
import torchvision.datasets
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoader

dataset = torchvision.datasets.CIFAR10(root="D:\\Python_Project\\pytorch\\dataset2",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset=dataset,batch_size=1)

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        self.model1 =Sequential(
            Conv2d(3, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 64, 5, padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10),
        )

    def forward(self,x):
        x = self.model1(x)
        return x

tudui = Tudui()

# 使用交叉熵损失函数
loss_cross = nn.CrossEntropyLoss()

for data in dataloader:
    imgs,labels = data
    outputs = tudui(imgs)
    results = loss_cross(outputs,labels)

    results.backward()
    print(results)
python 复制代码
import torch
from torch import nn
from torch.nn import L1Loss, MSELoss

inputs = torch.tensor([1,2,3],dtype=torch.float32)
targets = torch.tensor([1,2,5],dtype=torch.float32)

inputs = torch.reshape(inputs,(1,1,1,3))
targets = torch.reshape(targets,(1,1,1,3))

loss = L1Loss(reduction='sum')
result = loss(inputs,targets)
print(result)

loss_mse = MSELoss()
result_mse = loss_mse(inputs,targets)
print(result_mse)

参考资料:

视频教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】

相关推荐
高洁01几秒前
10分钟了解向量数据库(1)
python·深度学习·机器学习·transformer·知识图谱
gihigo19982 分钟前
MATLAB中实现信号迭代解卷积的几种方法
人工智能·深度学习·matlab
DP+GISer2 分钟前
00基于pytorch的深度学习遥感地物分类全流程实战教程(包含遥感深度学习数据集制作与大图预测)-前言
pytorch·python·深度学习·图像分割·遥感·地物分类
kisshuan123963 分钟前
黄芪属植物物种识别与分类:基于 Faster R-CNN C4 模型的深度学习实现
深度学习·分类·r语言
拉姆哥的小屋4 分钟前
从T5到Sentence-BERT:打造下一代个性化推荐系统 - EmbSum深度解析
人工智能·深度学习
qq_160144877 分钟前
低成本高效学习路线图
学习
航Hang*7 分钟前
第七章:综合布线技术 —— 设备间子系统的设计与施工
网络·笔记·学习·期末·复习
CoovallyAIHub10 分钟前
YOLOv12之后,AI在火场如何进化?2025最后一篇YOLO论文揭示:要在浓烟中看见关键,仅靠注意力还不够
深度学习·算法·计算机视觉
好奇龙猫12 分钟前
【人工智能学习-AI-MIT公开课13.- 学习:遗传算法】
android·人工智能·学习
mg66812 分钟前
0基础开发学习python工具_____用 Python + Pygame 打造绚丽烟花秀 轻松上手体验
开发语言·python·学习·pygame