【深度学习】CrossEntropyLoss需要手动softmax吗?

【深度学习】CrossEntropyLoss需要手动softmax吗?

问题:CrossEntropyLoss需要手动softmax吗?

之前用 pytorch 实现自己的网络时,使用CrossEntropyLoss的时候将网路输出经 softmax激活层后再计算CrossEntropyLoss。

答案:不需要

调用了损失函数CrossEntropyLoss,最后一层是不需要再加softmax函数激活的。

官方文档

官方文档链接:pytorch-crossentropyloss相当于在输入上应用LogSoftmax,然后NLLLoss

代码解释

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

criterion = nn.CrossEntropyLoss()

# 模拟网络输出(未经过softmax)
logits = torch.tensor([[0.2447, 3, 1]], requires_grad=True)
# 模拟目标标签
target = torch.tensor([0])

# 使用Softmax + CrossEntropyLoss计算损失
softmax_layer = nn.Softmax(dim=1)
softmax_output = softmax_layer(logits)
loss_softmax_cross_entropy = criterion(softmax_output, target)
print("softmax + CrossEntropyLoss:", loss_softmax_cross_entropy.item())

# 直接使用CrossEntropyLoss计算损失
loss_cross_entropy = criterion(logits, target)
print("CrossEntropyLoss:", loss_cross_entropy.item())

# 使用LogSoftmax + NLLLoss计算损失
softmax_output = torch.softmax(logits, dim=1)
log_softmax_output = torch.log(softmax_output)
log_softmax_nll = F.nll_loss(log_softmax_output, target)
print("LogSoftmax + NLLLoss:", log_softmax_nll.item())
相关推荐
全栈独立开发者2 小时前
架构师日记:当点餐系统遇上 AI —— 基于 Spring AI + Pgvector + DeepSeek 的架构设计思路
人工智能
谷歌开发者2 小时前
Web 开发指向标|开发者工具 AI 辅助功能的 5 大实践应用
前端·人工智能
kkai人工智能3 小时前
AI写作:从“废话”到“爆款”
开发语言·人工智能·ai·ai写作
づ安眠丶乐灬7 小时前
计算机视觉中的多视图几何 - 1
人工智能·vscode·计算机视觉
2503_928411567 小时前
项目中的一些问题(补充)
人工智能·python·tensorflow
MarkHD7 小时前
智能体在车联网中的应用 第1天 车联网完全导论:从核心定义到架构全景,构建你的知识坐标系
人工智能·架构
中科米堆7 小时前
塑料制品企业部署自动化三维扫描仪设备,解决注塑件变形问题-中科米堆CASAIM
人工智能
星图云8 小时前
从数据累积到精准解析:AI解译打造遥感数据高效利用新范式
人工智能·卫星遥感
飞哥数智坊8 小时前
AI 大厂的“护城河”,也会成为它们的束缚
人工智能·创业