【深度学习】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())
相关推荐
龙虾PRO8 小时前
把握人工智能时代机遇,夯实科技强国建设根基
人工智能·科技·百度
冬奇Lab9 小时前
企业知识库系列(00):在写第一行代码之前,先把评测数据集做好
人工智能
二川bro9 小时前
Obsidian+AI自生长知识库,告别无效笔记整理
人工智能
冬奇Lab9 小时前
开源项目第184期:MiroFish — 盛大出品的群体智能预测引擎,用数千 AI Agent 模拟社会演化来预测未来
人工智能·开源·资讯
科研小刘带你玩学术10 小时前
【IEEE论文解析】深度强化学习如何优化未来智能无线通信系统?
人工智能·边缘计算·无线通信·6g·深度强化学习·智能系统·ieee论文
LyridRelan10 小时前
Skill Cli MCP 的三者关系以及部分Q&A
人工智能·ai·个人开发
我就是妖怪10 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
夏沫的梦10 小时前
用 TRAE Work 3 小时搞定 3 天工作量:一场竞品调研报告的实战复盘
人工智能
等一朵映山红10 小时前
多模态向量库选型:ChromaDB 适配图文多模态数据实战
人工智能