【深度学习】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())
相关推荐
知乎的哥廷根数学学派7 分钟前
基于卷积特征提取和液态神经网络的航空发动机剩余使用寿命预测算法(python)
人工智能·pytorch·python·深度学习·神经网络·算法
高洁017 分钟前
AIGC技术与进展(2)
人工智能·python·深度学习·机器学习·数据挖掘
岑梓铭9 分钟前
YOLO深度学习(计算机视觉)—毕设笔记(yolo训练效率加快)
人工智能·笔记·深度学习·神经网络·yolo·计算机视觉
Nautiluss11 分钟前
一起调试XVF3800麦克风阵列(十六)
人工智能·单片机·音频·语音识别·dsp开发·智能硬件
AI街潜水的八角14 分钟前
基于深度学习神经网络YOLOv4目标检测的汽车车牌识别系统
深度学习·神经网络·yolo
人工智能AI技术15 分钟前
安卓AI智能体开发实战:基于AndroidGen-GLM搭建手机端超级助理,支持离线运行
人工智能
指掀涛澜天下惊19 分钟前
概率论 - 贝叶斯定理
人工智能·机器学习·概率论·贝叶斯定理·贝叶斯公式
CCPC不拿奖不改名23 分钟前
“Token→整数索引” 的完整实现步骤
人工智能·python·rnn·神经网络·自然语言处理·token·josn
deephub23 分钟前
多智能体强化学习(MARL)核心概念与算法概览
人工智能·机器学习·强化学习·多智能体
张小凡vip28 分钟前
数据挖掘(五) -----JupyterHub 使用gitlab的账号体系进行认证
人工智能·数据挖掘·gitlab