神经网络的损失函数——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 分钟前
Flask + PyTorch模型部署实战:从训练权重到API接口完整工程解析(附完整代码)
人工智能·pytorch·python·flask·模型推理·ai 工程化
我的温馨家园17 分钟前
新手入局干细胞研究的五大认知陷阱
大数据·人工智能·精选
爱吃大芒果23 分钟前
AI 智能体工作流设计蓝图:将非结构化情绪记录转化为高精度的模型 Prompt 上下文
人工智能·华为·prompt·harmonyos
小尘要自信25 分钟前
小米摄像头怎么接入RTSP?Go2RTC转流、EasyNVR录像与公网访问教程
人工智能·docker·开源
ACP广源盛1392462567327 分钟前
GSV6155 @ACP#工业车规 DP1.4 重定时器 Retimer
大数据·人工智能·分布式·嵌入式硬件
Black蜡笔小新30 分钟前
企业AI算力工作站/企业级AI模型工作站DLTM训推一体工作站破解企业AI建模难题
人工智能·机器学习
海兰32 分钟前
【AI编程思考:第八篇】从演示到生产:AI工程部署实战指南
大数据·人工智能·ai编程
冬哥聊AI33 分钟前
京东面试官笑了:上下文都 1M 了,Re-Ranker 还有啥用?容量≠质量的认知纠偏
人工智能
水龙吟啸42 分钟前
华为2026.7.1机考选择题+编程题【速刷敲黑板】
人工智能
名不经传的养虾人43 分钟前
从0到1:企业级AI项目迭代日记 Vol.61|记忆不是越多越好,装一道门比装满更重要
数据库·人工智能·ai编程·ai工作流·企业ai