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

相关推荐
hyshhhh17 分钟前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
薛定谔的猫-菜鸟程序员20 分钟前
零基础玩转深度神经网络大模型:从Hello World到AI炼金术-详解版(含:Conda 全面使用指南)
人工智能·神经网络·dnn
币之互联万物24 分钟前
2025 AI智能数字农业研讨会在苏州启幕,科技助农与数据兴业成焦点
人工智能·科技
云卓SKYDROID25 分钟前
科技赋能消防:无人机“挂弹灭火“构筑森林防火墙!
人工智能·科技·无人机·科普·云卓科技
gaoshengdainzi36 分钟前
镜片防雾性能测试仪在自动驾驶与无人机领域的创新应用
人工智能·自动驾驶·无人机·镜片防雾性能测试仪
Listennnn1 小时前
优雅的理解神经网络中的“分段线性单元”,解剖前向和反向传播
人工智能·深度学习·神经网络
云卓SKYDROID1 小时前
无人机机体结构设计要点与难点!
人工智能·科技·无人机·科普·云卓科技
誉鏐1 小时前
PyTorch复现线性模型
人工智能·pytorch·python
我要昵称干什么1 小时前
基于S函数的simulink仿真
人工智能·算法
向上的车轮1 小时前
NOA是什么?国内自动驾驶技术的现状是怎么样的?
人工智能·机器学习·自动驾驶