news 2026/6/28 2:29:09

CrossEntropyLoss 详解:分类任务为什么常用它

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CrossEntropyLoss 详解:分类任务为什么常用它

做分类任务时,经常会遇到CrossEntropyLoss

比如图片分类、文本分类、情感分析,只要模型要从多个类别里选一个答案,它就很可能会出现。

它为什么这么常用?

因为分类任务里,我们关心的不只是“猜没猜对”,还关心模型对正确答案有多自信。

分类模型输出的是什么

假设我们有一个三分类任务:猫、狗、鸟。

模型最后可能会输出三个分数:

猫:2.1 狗:0.3 鸟:-1.2

这些分数还不是概率,它们通常叫 logits。

我们可以用Softmax把它们转换成概率:

猫:0.82 狗:0.15 鸟:0.03

如果真实答案是猫,那么这个预测就比较好,因为模型给猫的概率最高。

CrossEntropyLoss 关注什么

CrossEntropyLoss 会重点看正确类别的概率。

如果正确类别的概率很高,loss 就小;如果正确类别的概率很低,loss 就大。

比如真实答案是猫:

  • 模型给猫 0.9,loss 很小

  • 模型给猫 0.5,loss 变大

  • 模型给猫 0.1,loss 会很大

这很符合直觉。

模型不仅要选对,还要对正确答案有足够信心。

为什么不能只看准确率

假设两个模型都预测对了。

模型 A 给正确类别的概率是0.51

模型 B 给正确类别的概率是0.95

从准确率看,它们都对了;但从训练角度看,模型 B 显然更好。

CrossEntropyLoss 就能区分这种差别。

它会鼓励模型把更多概率分给正确类别,而不是只要勉强猜对就行。

PyTorch 里怎么用

在 PyTorch 里,CrossEntropyLoss通常这样用:

import torch from torch import nn ​ loss_fn = nn.CrossEntropyLoss() ​ logits = torch.tensor([[2.1, 0.3, -1.2]]) target = torch.tensor([0]) ​ loss = loss_fn(logits, target)

这里有一个很重要的点:

CrossEntropyLoss接收的是 logits,不需要你提前手动做 Softmax。

因为 PyTorch 的CrossEntropyLoss内部已经包含了LogSoftmax和负对数似然损失。

如果你先手动 Softmax,再传进去,反而可能造成数值问题。

标签应该长什么样

对于多分类任务,target 通常是类别索引。

比如:

0 表示猫 1 表示狗 2 表示鸟

如果一批数据有 4 个样本,标签可能是:

target = torch.tensor([0, 2, 1, 0])

这表示第 1 个和第 4 个样本是猫,第 2 个是鸟,第 3 个是狗。

小结

CrossEntropyLoss 很适合分类任务,因为它能衡量模型对正确类别的信心。

记住三个关键点:

  1. 它常用于分类任务。

  2. PyTorch 里通常直接传 logits。

  3. target 通常是类别索引,而不是 one-hot。

理解了这些,再看分类模型训练代码,就不会被 loss 那一行卡住。

技术图:把关键链路画清楚

可运行实验:拆开 CrossEntropyLoss 的两步计算

PyTorch 的交叉熵等价于先对 logits 做log_softmax,再取正确类别的负对数似然。下面直接验证二者结果一致。

import torch from torch import nn ​ logits = torch.tensor([[2.0, 1.0, 0.1]]) target = torch.tensor([0]) ce = nn.CrossEntropyLoss()(logits, target) log_probs = torch.log_softmax(logits, dim=1) manual = -log_probs[0, target[0]] print("概率:", [round(v, 4) for v in torch.softmax(logits, dim=1)[0].tolist()]) print(f"CrossEntropyLoss: {ce.item():.6f}") print(f"手动计算: {manual.item():.6f}")

运行结果:

概率: [0.659, 0.2424, 0.0986] CrossEntropyLoss: 0.417030 手动计算: 0.417030

正确类别概率约为 0.659,对它取负对数得到约 0.417。正确类别概率越低,损失越大。

常见误区

  1. 先 Softmax 再传给CrossEntropyLoss。它内部已经包含相应计算,应直接传 logits。

  2. Target 应该是 one-hot。常规多分类场景下 target 是LongTensor类别索引。

动手练习

保持正确类别不变,把第一个 logit 从 2 改成 4,验证正确类别概率上升、损失下降。


本文首发于「去你想去的地方」: CrossEntropyLoss 详解:分类任务为什么常用它 | 去你想去的地方

完整学习路线、视频版和后续更新请访问原文。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/28 2:26:54

Hermes Agent 这次更新有点猛:MoA 跑分超过 Opus 4.8 和 GPT 5.5

今天这个更新,我觉得 Hermes Agent 可以单独拿出来说一下, 不是因为它又接了一个模型,也不是因为它做了一个新按钮, 而是 Nous Research 把 MoA,也就是 Mixture of Agents,做成了 Hermes Agent 里的一个虚…

作者头像 李华
网站建设 2026/6/28 2:13:19

利用FunctionInvokingChatClient实现ReAct循环

(Reasoning and Acting,推理与行动)是一种结合了推理与工具使用的LLM工作流模式。 它通过交替进行推理(Reasoning)和行动(Acting),让AI能够像人类一样,一边分析问题一边寻…

作者头像 李华
网站建设 2026/6/28 2:13:07

第一个:算力——让AI有了有力的工具。

同样烧开一壶水,用电磁炉5分钟搞定,用蜡烛可能得烧到明天。AI的算力,就是电磁炉和蜡烛的差别。电脑芯片,从几十纳米,到如今的几纳米,能力越来越强。强大的算力,让AI的训练,从几年变成…

作者头像 李华
网站建设 2026/6/28 2:11:34

MrRSS | 基于 AI 的 RSS 阅读器

链接:https://pan.quark.cn/s/8381b883481d基于 AI 的 RSS 阅读器,集成先进 AI 技术,赋能翻译、摘要、推荐等多种功能,支持 URL、XPath、脚本、Newsletter 等多种订阅源类型,支持 Obsidian、FreshRSS、RSSHub 等主流工…

作者头像 李华
网站建设 2026/6/28 2:07:39

P1423 小玉在游泳 题解

题目 小玉在游泳 —————————————————————————————— 题目描述 小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游 2 米,可是随着越来越累,力气越来越…

作者头像 李华
网站建设 2026/6/28 2:07:25

HTTP协作的Web服务器

这篇文章解决什么问题我们平时访问一个网站时,直觉上会以为浏览器直接连到了目标服务器。实际情况往往更复杂:请求可能先经过代理服务器,也可能经过网关、隧道、缓存服务器,最后才到达真正保存资源的服务器。这一章主要讨论的就是…

作者头像 李华