【pytorch】交叉熵损失函数 F.cross_entropy()

简介: 【pytorch】交叉熵损失函数 F.cross_entropy()

F.cross_entropy(x,y)


  cross_entropy(x,y)是交叉熵损失函数,一般用于在全连接层之后,做loss的计算。

  其中x是二维张量,是全连接层的输出;y是样本标签值。

x[batch_size,type_num];y[batch_size]。

  cross_entropy(x,y)计算结果是一个小数,表示loss的值。

举例说明


x = np.array([[1, 2,3,4,5],#共三3样本,有5个类别
              [1, 2,3,4,5],
              [1, 2,3,4,5]]).astype(np.float32)
y = np.array([1, 1, 0])#这3个样本的标签分别是1,1,0即两个是第2类,一个是第1类
x = torch.from_numpy(x)
y = torch.from_numpy(y).long()
soft_out = F.softmax(x,dim=1)#给每个样本的pred向量做指数归一化---softmax
log_soft_out = torch.log(soft_out)#将上面得到的归一化的向量再point-wise取对数
loss = F.nll_loss(log_soft_out, y)#将归一化且取对数后的张量根据标签求和,实际就是计算loss的过程
"""
这里的loss计算式根据batch_size归一化后的,即是一个batch的平均单样本的损失,迭代一次模型对一个样本平均损失。
在多个epoch训练时,还会求每个epoch内的总损失,用于衡量epoch之间模型性能的提升。
"""
print(soft_out)
print(log_soft_out)
print(loss)
loss = F.cross_entropy(x, y)
print(loss)

输出:


  softmax:

  tensor([[0.0117, 0.0317, 0.0861, 0.2341, 0.6364],

  [0.0117, 0.0317, 0.0861, 0.2341, 0.6364],

  [0.0117, 0.0317, 0.0861, 0.2341, 0.6364]])

  tensor([[-4.4519, -3.4519, -2.4519, -1.4519, -0.4519], 

   [-4.4519, -3.4519, -2.4519, -1.4519, -0.4519],

  [-4.4519, -3.4519, -2.4519, -1.4519, -0.4519]])

  tensor(3.7852)

结果分析


F.softmax(x,dim=1):一行和为1 sum([0.0117, 0.0317, 0.0861, 0.2341, 0.6364])=1
softmax函数公式
torch.log(soft_out):对softmax的结果进行取对数
a =pow(math.e,1)/(pow(math.e,1)+pow(math.e,2)+pow(math.e,3)+pow(math.e,4)+pow(math.e,5)) # 0.011656230956039609近似0.0117
print(math.log(0.011656230956039609)) # -4.4519
F.nll_loss(log_soft_out, y):对取对数的结果,根据y的值,(y值是索引),找到对应的值,黄色部分,各自取相反数再相加,求平均
(3.4519+3.4519+4.4519)/3 = 3.7852
所以:
cross_entropy函数:softmax->log->nll_loss

特别注意⭐⭐


  全连接层的输出形状为[batch_size,type_num]。含义是第i个样本为第j类的概率。

相关文章
|
机器学习/深度学习 文字识别 PyTorch
PyTorch内置损失函数汇总 !!
PyTorch内置损失函数汇总 !!
489 0
|
数据挖掘 PyTorch 算法框架/工具
人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
1830 0
|
12月前
|
机器学习/深度学习 JavaScript PyTorch
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
生成对抗网络(GAN)的训练效果高度依赖于损失函数的选择。本文介绍了经典GAN损失函数理论,并用PyTorch实现多种变体,包括原始GAN、LS-GAN、WGAN及WGAN-GP等。通过分析其原理与优劣,如LS-GAN提升训练稳定性、WGAN-GP改善图像质量,展示了不同场景下损失函数的设计思路。代码实现覆盖生成器与判别器的核心逻辑,为实际应用提供了重要参考。未来可探索组合优化与自适应设计以提升性能。
1033 7
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
|
5月前
|
边缘计算 人工智能 PyTorch
130_知识蒸馏技术:温度参数与损失函数设计 - 教师-学生模型的优化策略与PyTorch实现
随着大型语言模型(LLM)的规模不断增长,部署这些模型面临着巨大的计算和资源挑战。以DeepSeek-R1为例,其671B参数的规模即使经过INT4量化后,仍需要至少6张高端GPU才能运行,这对于大多数中小型企业和研究机构来说成本过高。知识蒸馏作为一种有效的模型压缩技术,通过将大型教师模型的知识迁移到小型学生模型中,在显著降低模型复杂度的同时保留核心性能,成为解决这一问题的关键技术之一。
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
4184 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
机器学习/深度学习
小土堆-pytorch-神经网络-损失函数与反向传播_笔记
在使用损失函数时,关键在于匹配输入和输出形状。例如,在L1Loss中,输入形状中的N代表批量大小。以下是具体示例:对于相同形状的输入和目标张量,L1Loss默认计算差值并求平均;此外,均方误差(MSE)也是常用损失函数。实战中,损失函数用于计算模型输出与真实标签间的差距,并通过反向传播更新模型参数。
341 7
|
机器学习/深度学习 监控 PyTorch
PyTorch模型训练:优化器与损失函数的选择
【4月更文挑战第17天】PyTorch中的优化器(如SGD, Adam, RMSprop)和损失函数(如MSE Loss, Cross Entropy Loss)对模型训练效果有显著影响。优化器选择应基于任务复杂度和数据规模,SGD适合简单任务,而Adam和RMSprop适用于复杂情况。损失函数选择依赖于任务类型,MSE Loss用于回归,Cross Entropy Loss用于分类。实践中,应尝试不同组合,调整学习率,监控训练过程,并使用验证集优化模型。
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(6):模型的权值初始化与损失函数
Pytorch学习笔记(6):模型的权值初始化与损失函数
851 0
Pytorch学习笔记(6):模型的权值初始化与损失函数

热门文章

最新文章

推荐镜像

更多