理论学习: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作为模型的输出,并将对应的真实标签作为目标值传递给该函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cdn和oss有什么区别

CDN(内容分发网络)和OSS(对象存储服务)是两种常见的互联网技术,它们在内容存储和分发方面有着不同的功能和特点。 CDN:加速网络内容分发 CDN通过部署在全球各地的节点服务器,将静态内容缓存到离…

langchain入门

1、langchain的2个能力 可以将 LLM 模型与外部数据源进行连接允许与 LLM 模型进行交互 2、基础功能 LLM 调用 支持多种模型接口,比如 OpenAI、Hugging Face、AzureOpenAI ...Fake LLM,用于测试缓存的支持,比如 in-mem(内存&am…

开源是什么?——跟老吕学Python编程

开源是什么?——跟老吕学Python编程 开源是什么?开放源代码软件是什么?开源软件许可证是什么?开放源代码软件是什么?开放源代码的软件代表有什么?开放源代码软件与自由软件的概念 开源的定义是什么&#xf…

JavaScript基础6之执行上下文、作用域链、函数创建、函数激活、checkScope的执行过程、闭包、this

JavaScript基础 执行上下文执行上下文中的属性变量对象全局上下文的变量对象函数上下文执行过程进入执行上下文代码执行思考题 作用域链函数创建函数激活checkScope的执行过程总结 闭包分析闭包 this 执行上下文 执行上下文中的属性 每一个执行上下文都有三个核心属性 变量对…

职场逆袭!如何打造‘黄金简历’

现在的职场,无论是哪个行业都特别卷,想要找到一份满意,不仅要求你要拥有丰富的工作经验,而且还要求你的简历足够精彩,这样才能在一众求职者中脱颖而出! 一、希赛老师在线指导 之前,小赛分享了…

c#WPF绑定

在 C# WPF 中,绑定是一种将 UI 元素(如文本框、列表框等)与数据源(如对象、集合等)关联起来的技术。通过绑定,可以在 UI 元素上显示和更新数据源中的数据,实现数据的双向同步。 下面是一个简单的…

CTP-API开发系列之四:接口对接准备

CTP-API开发系列之四:接口对接准备 CTP-API开发系列之四:接口对接准备CTP-API文件清单CTP-API通用规则命名规则Spi与Api CTP-API通讯模式开发语言选择 CTP-API开发系列之四:接口对接准备 CTP-API文件清单 文件名说明ThostFtdcTraderApi.h交…

mysql安装目录

方法一 输入如下sql命令 SELECT datadir;方法二 点击

docker-swarm集群管理命令

为什么选择swarm集群? 灵魂疑问:同样是集群,为什么选择docker swarm,而不不选择k8s或者k3s? 我的需求场景:不想直接用docker或者java -jar直接跑,修改前是使用java -jar方式,这两种…

Redis冲冲冲——Redis持久化方式及其区别

目录 引出Redis持久化方式Redis入门1.Redis是什么?2.Redis里面存Java对象 Redis进阶1.雪崩/ 击穿 / 穿透2.Redis高可用-主从哨兵3.持久化RDB和AOF4.Redis未授权访问漏洞5.Redis里面安装BloomFilte Redis的应用1.验证码2.Redis高并发抢购3.缓存预热用户注册验证码4.R…

代码背后的女性:突破性别壁垒的技术先驱

个人主页:17_Kevin-CSDN博客 收录专栏:《程序人生》 引言 在计算机科学的历史长河中,有许多杰出的女性为这个领域的发展做出了重要贡献。她们不仅在技术上取得了卓越成就,还打破了性别壁垒,为后来的女性树立了榜样。今…

力扣爆刷第91天之hot100五连刷41-45

力扣爆刷第91天之hot100五连刷41-45 文章目录 力扣爆刷第91天之hot100五连刷41-45一、102. 二叉树的层序遍历二、108. 将有序数组转换为二叉搜索树三、98. 验证二叉搜索树四、230. 二叉搜索树中第K小的元素五、199. 二叉树的右视图 一、102. 二叉树的层序遍历 题目链接&#x…

【算法】Hash存储——开放寻址法

模拟散列表 维护一个集合,支持如下几种操作: I x,插入一个整数 x; Q x,询问整数 x是否在集合中出现过; 现在要进行 N次操作,对于每个询问操作输出对应的结果。 输入格式 第一行包含整数 N&am…

查询IP地址保障电商平台安全

随着电子商务的快速发展,网购已经成为人们日常生活中不可或缺的一部分。然而,网络交易安全一直是人们关注的焦点之一,尤其是在面对日益频发的网络诈骗和欺诈行为时。为了提高网购平台交易的安全性,一种有效的方法是通过查询IP地址…

Python画图

Python中有多个库可以用于绘图,其中比较常用的有matplotlib、seaborn、plotly和bokeh等。这些库提供了丰富的绘图功能和自定义选项,可以帮助你创建各种类型的图表,包括线图、散点图、柱状图、饼图、热力图等。 下面是一个使用matplotlib库创…

ctfshow-XXE(web373-web378)

目录 XXE&#xff08;外部实体注入攻击&#xff09; web373 web374 web375 web376 web377 web378 知识点 XXE&#xff08;外部实体注入攻击&#xff09; XXE这几关有个前提flag在根目录下文件名为flag web373 <?php error_reporting(0); libxml_disable_entity_…

stable diffusion的额外信息融入方式

conditioning怎么往sd中添加&#xff0c;一般有三种&#xff0c;一种是直接和latent拼一下&#xff0c;另外很多是在unet结构Spatialtransformers上加&#xff0c;和文本特征一样&#xff0c;通过cross-attention往unet上加&#xff0c;这里还需要注意一点&#xff0c;在文本嵌…

大语言模型可信性浅谈

大语言模型可信性的研究 摘要&#xff1a; 随着人工智能技术的快速发展&#xff0c;大语言模型在自然语言处理领域的应用越来越广泛。然而&#xff0c;大语言模型的可信性一直是人们关注的焦点。本文将从多个维度探讨大语言模型的可信性问题&#xff0c;包括模型性能、数据质量…

调整分区失败,硬盘难启:原因分析与数据恢复之道

在数字化时代&#xff0c;硬盘作为存储数据的重要工具&#xff0c;其稳定性和安全性至关重要。然而&#xff0c;有时在调整分区的过程中&#xff0c;我们可能会遭遇失败&#xff0c;导致硬盘无法打开&#xff0c;数据无法访问。这种情况不仅令人沮丧&#xff0c;更可能带来不可…

基于springboot+layui仓库管理系统设计和实现

基于 java springbootlayui仓库管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…