Pytorch实用教程:nn.CrossEntropyLoss()的用法

在 PyTorch 中,nn.CrossEntropyLoss() 是一个非常常用且功能强大的损失函数,特别适合用于多类分类问题。这个损失函数结合了 nn.LogSoftmax()nn.NLLLoss() (Negative Log Likelihood Loss) 两个操作,从而在一个模块中提供完整的交叉熵损失计算功能。这不仅方便使用,也提高了数值稳定性。

功能说明

nn.CrossEntropyLoss() 计算模型输出实际标签之间的交叉熵损失。它自动完成softmax 概率分布的计算和对数似然损失的计算,这意味着你应该直接将网络的原始输出(logits,即未经 softmax 层处理的输出)作为 CrossEntropyLoss 的输入。

上面这句话非常重要,这就是为什么在用交叉熵损失函数的时候,在模型的输出部分见不到softmax的原因。

参数详解

nn.CrossEntropyLoss 主要有以下几个参数:

  • weight (Tensor, optional): 一个手动指定的权重,用于平衡类别间的损失贡献。这在类别不平衡的情况下非常有用。
  • size_average (bool, deprecated): 这个参数已经被弃用,用 reduction 参数代替。
  • ignore_index (int, optional): 指定一个类别索引,对于这个类别的目标(target),损失将不会被计算。这常用于忽略特定的类别。
  • reduce (bool, deprecated): 这个参数也已经被弃用,用 reduction 参数代替。
  • reduction (str, optional): 指定损失的计算模式。可以是 'none'(无操作),'mean'(计算损失的均值,是默认设置)或 'sum'(计算损失的总和)。

使用示例

下面是一个使用 nn.CrossEntropyLoss 的简单例子。假设我们有一个分类问题,目标是将输入分类到三个类别中的一个:

python 复制代码
import torch
import torch.nn as nn

# 假设我们有3个类别,batch_size为4
data = torch.randn(4, 3)  # 输入,来自某个神经网络的原始输出,形状为(batch_size, num_classes)
targets = torch.tensor([0, 2, 1, 0])  # 实际的标签,形状为(batch_size,)

# 创建交叉熵损失函数实例
criterion = nn.CrossEntropyLoss()

# 计算损失
loss = criterion(data, targets)
print(loss) # 输出:tensor(1.6401)

数学原理

对于每个样本 (i),假设 (C) 是类别总数,交叉熵损失定义为:

这里 (x[class_i]) 是模型输出的第 (i) 个样本对应其真实类别 (class_i) 的 logit。交叉熵损失将这些 logits 转换为正规化的概率分布,然后计算其对数似然。

应用场景

这个损失函数是处理多类分类问题的标准选择之一,特别是当你有一个多类的标签目标时。由于其数学上的稳定性,它在训练深度学习模型时非常受欢迎。使用它可以直接处理 logits,无需单独计算 softmax,从而在实际应用中减少计算量和增加数值稳定性。

相关推荐
SmartBrain几秒前
Qwen3-VL 模型架构及原理详解
人工智能·语言模型·架构·aigc
2301_822366354 分钟前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
renhongxia16 分钟前
AI算法实战:逻辑回归在风控场景中的应用
人工智能·深度学习·算法·机器学习·信息可视化·语言模型·逻辑回归
民乐团扒谱机13 分钟前
【AI笔记】精密光时频传递技术核心内容总结
人工智能·算法·光学频率梳
小郎君。24 分钟前
【无标题】
python
不惑_25 分钟前
通俗理解GAN的训练过程
人工智能·神经网络·生成对抗网络
喵手1 小时前
Python爬虫实战:数据治理实战 - 基于规则与模糊匹配的店铺/公司名实体消歧(附CSV导出 + SQLite持久化存储)!
爬虫·python·数据治理·爬虫实战·零基础python爬虫教学·规则与模糊匹配·店铺公司名实体消岐
喵手1 小时前
Python爬虫实战:国际电影节入围名单采集与智能分析系统:从数据抓取到获奖预测(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集国际电影节入围名单·从数据抓取到获奖预测
OpenCSG1 小时前
对比分析:CSGHub vs. Hugging Face:模型管理平台选型对
人工智能·架构·开源
云上凯歌1 小时前
传统老旧系统的“AI 涅槃”:从零构建企业级 Agent 集群实战指南
人工智能