神经网络的损失函数——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)

相关推荐
邵宇然12 分钟前
Rust Unsafe 安全规范:从避免未定义行为到构建安全抽象的工程实践
人工智能
TYUT_xiaoming21 分钟前
yolo模型训练
人工智能·python·yolo
2301_7807896626 分钟前
零信任架构中,身份感知防火墙(IAFW)的部署要点与最佳实践
linux·运维·服务器·人工智能·tcp/ip·架构
MicroTech202527 分钟前
业绩披露|微算法科技(MLGO)2025年净利润1.27亿元
大数据·人工智能·科技
百度Geek说27 分钟前
Superpowers:给 Claude Code 装上“工程大脑”
人工智能
AGIPlayer27 分钟前
没有生态的大模型不算前沿
大数据·人工智能·物联网
lulu121654407833 分钟前
OpenRouter Fusion 多模型融合架构深度拆解:预算级模型组团打平 Fable 5,多模型协作才是 AGI 的正确打开方式?
java·人工智能·架构·ai编程·agi
恋猫de小郭38 分钟前
Redis 作者反驳「中国模型之所以强,是因为通过 API 蒸馏了美国模型」
前端·人工智能·ai编程
林间码客1 小时前
04 ROC曲线与AUC:从零开始手动计算
大数据·人工智能·算法