神经网络的损失函数——nn.CrossEntropyLoss()

1.参数

复制代码
loss_func_none = nn.CrossEntropyLoss(reduction="none")
loss_func_mean = nn.CrossEntropyLoss(reduction="mean")
loss_func_sum = nn.CrossEntropyLoss(reduction="sum")

默认是"mean" 也就是说当loss_func_none = nn.CrossEntropyLoss()时 会输出一组batch 的损失平均值

复制代码
import torch
import torch.nn as nn
loss_func = nn.CrossEntropyLoss(reduction="none")

pre = torch.tensor([[0.8, 0.5, 0.2, 0.5],
                         [0.2, 0.9, 0.3, 0.2],
                         [0.4, 0.3, 0.7, 0.1],
                         [0.1, 0.2, 0.4, 0.8]], dtype=torch.float)
tgt_index = torch.tensor([0,1,2,3], dtype=torch.long)
print(loss_func(pre, tgt_index))

输出如下

复制代码
import torch
import torch.nn as nn
loss_func = nn.CrossEntropyLoss()

pre = torch.tensor([[0.8, 0.5, 0.2, 0.5],
                         [0.2, 0.9, 0.3, 0.2],
                         [0.4, 0.3, 0.7, 0.1],
                         [0.1, 0.2, 0.4, 0.8]], dtype=torch.float)
tgt_index = torch.tensor([0,1,2,3], dtype=torch.long)
print(loss_func(pre, tgt_index))

输出

tgt表示样本类别的真实值,有两种表示形式,一种是类别的index,另一种是one-hot形式。

复制代码
tgt_index_data = torch.tensor([0,
                               1,
                               2,
                               3], dtype=torch.long)
tgt_onehot_data = torch.tensor([[1, 0, 0, 0],
                                [0, 1, 0, 0],
                                [0, 0, 1, 0],
                                [0, 0, 0, 1]], dtype=torch.float)

损失函数|交叉熵损失函数 (zhihu.com)

2.计算过程

复制代码
loss_func = nn.CrossEntropyLoss()
pre = torch.tensor([0.8, 0.5, 0.2, 0.5], dtype=torch.float)
tgt = torch.tensor([1, 0, 0, 0], dtype=torch.float)
print("手动计算:")
print("1.softmax")
print(torch.softmax(pre, dim=-1))
print("2.取对数")
print(torch.log(torch.softmax(pre, dim=-1)))
print("3.与真实值相乘")
print(-torch.sum(torch.mul(torch.log(torch.softmax(pre, dim=-1)), tgt), dim=-1))
print()
print("调用损失函数:")
print(loss_func(pre, tgt))

交叉熵损失函数会自动对输入模型的预测值进行softmax。因此在多分类问题中,如果使用nn.CrossEntropyLoss(),则预测模型的输出层无需添加softmax层。

参考torch.nn.CrossEntropyLoss() 参数、计算过程以及及输入Tensor形状 - 知乎 (zhihu.com)

相关推荐
新智元28 分钟前
阿里王牌 Agent 横扫 SOTA,全栈开源力压 OpenAI!博士级难题一键搞定
人工智能·openai
新智元32 分钟前
刚刚,OpenAI/Gemini 共斩 ICPC 2025 金牌!OpenAI 满分碾压横扫全场
人工智能·openai
机器之心1 小时前
OneSearch,揭开快手电商搜索「一步到位」的秘技
人工智能·openai
阿里云大数据AI技术1 小时前
2025云栖大会·大数据AI参会攻略请查收!
大数据·人工智能
YourKing1 小时前
yolov11n.onnx格式模型转换与图像推理
人工智能
sans_1 小时前
NCCL的用户缓冲区注册
人工智能
sans_1 小时前
三种视角下的Symmetric Memory,下一代HPC内存模型
人工智能
算家计算2 小时前
模糊高清修复真王炸!ComfyUI-SeedVR2-Kontext(画质修复+P图)本地部署教程
人工智能·开源·aigc
虫无涯2 小时前
LangSmith:大模型应用开发的得力助手
人工智能·langchain·llm
算家计算2 小时前
DeepSeek-R1论文登《自然》封面!首次披露更多训练细节
人工智能·资讯·deepseek