当前位置: 首页 > news >正文

理论学习:nn.CrossEntropyLoss

该标准计算输入 logits 和目标之间的交叉熵损失。

代码实战

该损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类(具体几类)训练的时候是非常有用的。在训练过程中,对于每个类分配权值,可选的参数权值应该是一个1D张量。当你有一个不平衡的训练集时,这是是非常有用的。那么针对这个函数,下面将做详细的介绍。

import torch
import torch.nn as nn
x_input=torch.randn(3,3)#随机生成输入 
print('x_input:\n',x_input) 
y_target=torch.tensor([1,2,0])#设置输出具体值 print('y_target\n',y_target)#计算输入softmax,此时可以看到每一行加到一起结果都是1
softmax_func=nn.Softmax(dim=1)
soft_output=softmax_func(x_input)
print('soft_output:\n',soft_output)#在softmax的基础上取log
log_output=torch.log(soft_output)
print('log_output:\n',log_output)#对比softmax与log的结合与nn.LogSoftmaxloss(负对数似然损失)的输出结果,发现两者是一致的。
logsoftmax_func=nn.LogSoftmax(dim=1)
logsoftmax_output=logsoftmax_func(x_input)
print('logsoftmax_output:\n',logsoftmax_output)#pytorch中关于NLLLoss的默认参数配置为:reducetion=True、size_average=True
nllloss_func=nn.NLLLoss()
nlloss_output=nllloss_func(logsoftmax_output,y_target)
print('nlloss_output:\n',nlloss_output)#直接使用pytorch中的loss_func=nn.CrossEntropyLoss()看与经过NLLLoss的计算是不是一样
crossentropyloss=nn.CrossEntropyLoss()
crossentropyloss_output=crossentropyloss(x_input,y_target)
print('crossentropyloss_output:\n',crossentropyloss_output)

最后计算得到的结果为:

x_input:tensor([[ 2.8883,  0.1760,  1.0774],[ 1.1216, -0.0562,  0.0660],[-1.3939, -0.0967,  0.5853]])
y_targettensor([1, 2, 0])
soft_output:tensor([[0.8131, 0.0540, 0.1329],[0.6039, 0.1860, 0.2102],[0.0841, 0.3076, 0.6083]])
log_output:tensor([[-0.2069, -2.9192, -2.0178],[-0.5044, -1.6822, -1.5599],[-2.4762, -1.1790, -0.4970]])
logsoftmax_output:tensor([[-0.2069, -2.9192, -2.0178],[-0.5044, -1.6822, -1.5599],[-2.4762, -1.1790, -0.4970]])
nlloss_output:tensor(2.3185)
crossentropyloss_output:tensor(2.3185)

通过上面的结果可以看出,直接使用pytorch中的loss_func=nn.CrossEntropyLoss()计算得到的结果与softmax-log-NLLLoss计算得到的结果是一致的。

nn.CrossEntropyLoss接受的都是logits和标签值?

是的,nn.CrossEntropyLoss函数通常接受Logits和标签值作为输入。在PyTorch中,nn.CrossEntropyLoss是一种常用的损失函数,用于多分类问题。

具体地,CrossEntropyLoss函数将Logits作为模型的输出,并根据Logits和对应的标签值计算损失。它首先应用Softmax函数将Logits转换为概率分布,然后计算预测概率分布与真实标签之间的交叉熵损失。

在使用CrossEntropyLoss函数时,通常需要将模型的输出(Logits)和对应的真实标签传递给该函数。函数内部会自动进行Logits的Softmax转换和交叉熵损失的计算。最终,该函数返回表示损失的标量值,可以用于模型的优化和训练过程。

因此,当使用nn.CrossEntropyLoss函数时,通常将Logits作为模型的输出,并将对应的真实标签作为目标值传递给该函数。

相关文章:

  • linux中git暂存,提交,上传到github
  • 深入学习默认成员函数——c++指南
  • 学习数据节构和算法的第15天
  • 什么是jwt
  • 【Spring Boot 3】动态注入和移除Bean
  • git - 笔记
  • 在 Python 中从键盘读取用户输入
  • Promise图解,Pass
  • 【Web】浅聊Java反序列化之C3P0——JNDI注入利用
  • 【Qt】四种绘图设备详细使用
  • 飞塔防火墙开局百篇——002.FortiGate上网配置——透明模式配置(Transparent)
  • Qt自定义标题栏的多屏适配
  • React-路由小知识
  • 【从部署服务器到安装autodock vina】
  • 结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(下)
  • Google 是如何开发 Web 框架的
  • 10个最佳ES6特性 ES7与ES8的特性
  • 30天自制操作系统-2
  • Angular6错误 Service: No provider for Renderer2
  • bootstrap创建登录注册页面
  • Hibernate【inverse和cascade属性】知识要点
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Python - 闭包Closure
  • QQ浏览器x5内核的兼容性问题
  • React中的“虫洞”——Context
  • 第十八天-企业应用架构模式-基本模式
  • 翻译--Thinking in React
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • ------- 计算机网络基础
  • 京东美团研发面经
  • 前嗅ForeSpider采集配置界面介绍
  • 数据仓库的几种建模方法
  • 移动端解决方案学习记录
  • 再次简单明了总结flex布局,一看就懂...
  • ionic异常记录
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​渐进式Web应用PWA的未来
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (arch)linux 转换文件编码格式
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (转)项目管理杂谈-我所期望的新人
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET序列化 serializable,反序列化
  • .NET中GET与SET的用法
  • @Transactional 竟也能解决分布式事务?
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [1181]linux两台服务器之间传输文件和文件夹
  • [Android]创建TabBar
  • [AR]Vumark(下一代条形码)
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [BUUCTF 2018]Online Tool
  • [BZOJ4010]菜肴制作
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]
  • [HNOI2015]实验比较