郭震 AI公众号:郭震AI

13 定义损失函数

发布日期:

最近更新:

分类: Pytorch小白

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点5 个
图文要点6 张
正文规模1.4k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 5 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

定义损失函数流程图查看大图
定义损失函数流程图

损失函数告诉模型什么叫错。回归、二分类、多分类的 loss 不同,输出张量形状和标签格式也要匹配。

定义损失函数核对图查看大图
定义损失函数核对图

遇到 loss 不下降,我会先检查三件事:模型输出形状、标签形状、损失函数是否适合任务。

在机器学习中,损失函数是衡量模型输出与真实值之间差异的指标。为了保证我们训练的模型能够有效地进行预测,我们需要定义一个合适的损失函数。本文将深入探讨如何在 PyTorch 中定义和使用损失函数,并与上一篇中提到的激活函数和下一篇关于优化器的内容相连接。

为什么损失函数重要?

损失函数的核心作用是指导优化器如何调整模型参数,使得最终模型的预测结果尽可能接近目标输出。通过计算损失函数的值,优化器能够了解当前模型的表现,从而在训练过程中不断地进行调整。

PyTorch损失函数判断卡查看大图
PyTorch损失函数判断卡

定义 PyTorch 损失函数时,先看分类或回归任务、输出形状、标签格式、 reduction 设置和梯度稳定性。

常见的损失函数

PyTorch 中,有多种损失函数可供选择,以下是一些常见的损失函数:

PyTorch阅读地图卡查看大图
PyTorch阅读地图卡

《定义损失函数》适合边看图边读正文。先确认问题和判断标准,再看概念解释与练习步骤,信息会更容易连成一条线。

  1. 均方误差损失 (MSELoss): 适用于回归问题,定义为预测值与真实值之间差值的平方和的平均值。

    MSELoss=1ni=1n(yiy^i)2\text{MSELoss} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
  2. 交叉熵损失 (CrossEntropyLoss): 常用于分类问题,能够处理多类别标签。

    CrossEntropyLoss=1ni=1nj=1Cyijlog(y^ij)\text{CrossEntropyLoss} = -\frac{1}{n} \sum_{i=1}^{n} \sum_{j=1}^{C} y_{ij} \log(\hat{y}_{ij})

    其中,CC为类别数,yijy_{ij}为真实标签,y^ij\hat{y}_{ij}为预测概率。

  • 二元交叉熵损失 (BCELoss): 适用于二分类问题。

    BCELoss=1ni=1n[yilog(y^i)+(1yi)log(1y^i)]\text{BCELoss} = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)]
  • 在 PyTorch 中定义损失函数

    让我们通过一个简单的示例来了解如何在 PyTorch 中定义损失函数。假设我们正在训练一个简单的回归模型,使用均方误差损失。

    示例代码

    import torch
    import torch.nn as nn
    import torch.optim as optim
    
    # 创建一个简单的线性模型
    class SimpleModel(nn.Module):
        def __init__(self):
            super(SimpleModel, self).__init__()
            self.linear = nn.Linear(1, 1)
    
        def forward(self, x):
            return self.linear(x)
    
    # 初始化模型、损失函数和优化器
    model = SimpleModel()
    criterion = nn.MSELoss()  # 策略(定义损失函数)
    optimizer = optim.SGD(model.parameters(), lr=0.01)  # 待讲解的优化器
    
    # 示例输入输出
    x = torch.tensor([[1.0], [2.0], [3.0]], requires_grad=True)
    y = torch.tensor([[2.0], [4.0], [6.0]])
    
    # 训练过程
    for epoch in range(100):
        model.train()
        
        # 清零梯度
        optimizer.zero_grad()
    
        # 前向传播
        outputs = model(x)
        
        # 计算损失
        loss = criterion(outputs, y)  # 计算损失
        print(f'Epoch {epoch+1}, Loss: {loss.item()}')
    
        # 反向传播
        loss.backward()
        
        # 更新参数
        optimizer.step()
    

    在上面的代码中,我们首先定义了一个简单的线性模型,然后使用 nn.MSELoss() 来定义均方误差损失。每次迭代中,我们计算输出与真实值之间的损失,并通过梯度下降法更新模型参数。

    定义损失函数应用复盘卡查看大图
    定义损失函数应用复盘卡

    复习《定义损失函数》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

    定义损失函数应用检查卡查看大图
    定义损失函数应用检查卡

    练习《定义损失函数》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

    总结

    定义合适的损失函数是模型训练过程中非常重要的一步。它直接影响模型的学习方向与效果。在 PyTorch 中,我们可以轻松地通过 torch.nn 模块中的内置损失函数来实现。

    在下一篇中,我们将讨论如何选择优化器,为模型的训练提供更有效的参数更新策略。希望通过上篇的激活函数、当前篇的损失函数以及接下来的优化器选择,使大家能够更全面地掌握模型训练的关键要素。

    继续阅读

    从这篇继续找到相关教程

    AI 教程总索引

    常见问题

    读前先确认这三点

    定义损失函数适合谁读?

    这是 PyTorch 入门 系列第 13 / 20 篇,适合正在学习PyTorch 入门,并且需要把概念落到操作步骤或判断标准里的读者。

    读这篇PyTorch 入门教程要多久?

    按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

    这篇文章里的图文节点怎么用?

    正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

    分享文章

    转发到常用平台

    微信/朋友圈可先复制链接

    相关教程

    AI 教程总索引

    继续阅读

    继续找到相关 AI 教程

    返回栏目

    Reader Messages

    读者留言

    有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

    最多 800 字

    为了防刷,每条留言会做长度、链接数量和提交频率限制。

    0/800

    留言列表

    0
    正在加载留言...