【深度学习基础(4)】pytorch 里的log_softmax, nll_loss, cross_entropy的关系

一、常用的函数有: log_softmax,nll_loss, cross_entropy

1.log_softmax

log_softmax就是log和softmax合并在一起执行,log_softmax=log+softmax

2. nll_loss

nll_loss函数全称是negative log likelihood loss, 函数表达式为:f(x,class)=−x[class]
例如:假设x=[5,6,9], class=1, 则f(x,class)=−x[1]=−6

3. cross_entropy交叉熵

cross_entropy=log+softmax+nll_loss

二、代码实现

import torch
import torch.nn.functional as Fpreds = torch.tensor([[0.1, 0.2, 0.3, 0.4], [0.1, 0.1, 0.1, 0.1]])
target = torch.tensor([2, 3])print('三种方式实现交叉熵损失')
print('----------------手动实现------------------------------')
one_hot = F.one_hot(target).float() # 对标签作 one_hot 编码
print('[1]one_hot编码target:\n', one_hot)
exp = torch.exp(preds)
print('[2]对网络预测preds求指数:\n', exp)
sum_ = torch.sum(exp, dim=1).reshape(-1, 1)  # 按行求和
softmax = exp / sum_  # 计算 softmax()
print('[3]softmax操作:\n', softmax)
log_softmax = torch.log(softmax) # 计算 log_softmax()
print('[4]softmax后取对数:\n', log_softmax)
nllloss = -torch.sum(one_hot * log_softmax) / target.shape[0]  # 标签乘以激活后的数据,求平均值,取反
print("[5]手动计算交叉熵:", nllloss)print('----------------调用log_softmax+nll_loss实现------------------------------')
# 调用 NLLLoss() 函数计算
Log_Softmax = F.log_softmax(preds, dim=1)  # log_softmax() 激活
Nllloss = F.nll_loss(Log_Softmax, target)  # 无需对标签作 one_hot 编码
print("函数使用Nllloss计算交叉熵:", Nllloss)print('------------------调用cross_entropy实现----------------------------')
# 直接使用交叉熵损失函数 CrossEntropy_Loss()
cross_entropy = F.cross_entropy(preds, target)  # 无需对标签作 one_hot 编码
print('函数交叉熵cross_entropy:', cross_entropy)

查看结果,可以看到三种方式计算的结果是一样的。
在这里插入图片描述

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

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

相关文章

市场复盘总结 20240327

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率中 14% 最常用…

Unity连接MySQL踩坑,问题处理记录

用的unity2021版本,MySQL是官方下载的最新版8.0.36. 安装MySQL时,过去如果安装过,一定要删干净,单纯的卸载不行,网上有很多教程。 MySQL安装完成后,将安装目录的MySql.Data.dll文件放入unity项目的Plugin…

Oracle数据库管理:从基础到高级应用【文末送书-45】

文章目录 入门篇:初识Oracle进阶篇:深入学习Oracle精通篇:掌握Oracle高级技术Oracle从入门到精通(第5版)(软件开发视频大讲堂)【文末送书-45】 在当今数字化时代,数据是企业成功的关…

Git基础(23):Git分支合并实战保姆式流程

文章目录 前言准备正常分支合并1. 创建两个不冲突分支2. 将dev合并到test 冲突分支合并1. 制造分支冲突2. 冲突合并 前言 Git分支合并操作 准备 这里先在Gitee创建了一个空仓库,方便远程查看内容。 正常分支合并 1. 创建两个不冲突分支 (1&#xf…

学校管理系统项目——数据架构设计方案

学校作为一个组织机构,需要管理大量的信息和数据,包括学生信息、教师信息、课程信息、成绩信息等。为了更高效地管理这些数据,提升学校管理水平和服务质量,本文对学校数据管理系统的需求进行了分析与总结,旨在为学校选…

鸿蒙OS应用示例:【数字滚动计时】

实现效果: 代码示例: RollingText.ets 组件封装 RollingText.ets 组件封装 /*** 滚动文字特效*/ Component export default struct RollingText {private num:numberprivate timerId: number -1State counter: number 0aboutToAppear() {this.timerId…

2024年上半年数学建模竞赛一览表(附赠12场竞赛的优秀论文+格式要求)[电工、妈杯、数维、五一等12场]

为了帮助大家更好地备战今年上半年十二场数学建模竞赛,我们为大家收集到了这十二场相关竞赛的优秀论文以及格式要求,具体内容如下所示。 资料获取 在文末 文中资料来源 名称竞赛官方网站天府杯https://www.tfmssy.org.cn/认证杯http://www.tzmcm.cn/i…

基于DWT(离散小波变换)的图像水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

【数字图像处理matlab系列】数组索引

【数字图像处理matlab系列】数组索引 【先赞后看养成习惯】【求点赞+关注+收藏】 MATLAB 支持大量功能强大的索引方案,这些索引方案不仅简化了数组操作,而且提高了程序的运行效率。 1. 向量索引 维数为1xN的数组称为行向量。行向量中元素的存取是使用一维索引进行的。因此…

智慧楼宇解决方案-提高楼宇整体效率

智慧楼宇借助云计算、物联网、大数据、人工智能和移动互联网等尖端技术和管理模式,打破传统的信息壁垒。智慧楼宇提供了更高效、舒适和便利的管理服务,今天古河云科技小编就来说一说智慧楼宇解决方案。 智慧楼宇的建设需要将园内基础设施层、数据平台层…

Matlab基础入门

基础操作: matlab命令行操作: matlab可以使用命令行执行程序,例如下图运行后在右边工作区会产生响应的变量,如不写分号,则会直接运行。 clear命令:clear用于清除变量。clc命令:clc用于清屏。 m…

HarmonyOS 应用开发案例

本帖下方集中了HarmonyOS Next应用开发时,会遇到的常见应用案例。后续会持续更新大量案例,帮助开发者快速学习。欢迎感兴趣的同学加入Q:454901491 72.手写绘制及保存图片案例(0319更新)(点此查看源码实现&…

Partisia Blockchain:真正做到兼顾隐私、高性能和可拓展的公链

目前,包括 Secret Network、Oasis Protocol 等在内的绝大多数以隐私为特性的可编程公链,在兼顾隐私的同时,在可拓展以及性能上或多或少的有所牺牲,即难以对诸多实际应用场景进行支撑。这归咎于链的设计以及共识机制的不合理&#…

netty构建udp服务器以及发送报文到客户端客户端详细案例

目录 一、基于netty创建udp服务端以及对应通道设置关键 二、发送数据 三、netty中的ChannelOption常用参数说明 1、ChannelOption.SO_BACKLOG 2、ChannelOption.SO_REUSEADDR 3、ChannelOption.SO_KEEPALIVE 4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF 5、Ch…

vite+vue3动态模块化导入并使用pinia

一、安装引入pinia 1.安装 pnpm install pinia # 或者使用 yarn yarn add pinia # 或者使用 npm npm install pinia 2.在main.js里引入 import { createApp } from vue import App from ./App.vue import { createPinia } from pinia createApp(App).use(createPinia()).mo…

java特殊文件——properties属性文件概述

前言: 整理下学习笔记,打好基础,daydayup!! properties properties是一个Map集合(键值对合集),但是一般不当作合集。而是用来代表属性文件,通过Properties读写属性文件里的内容 Properties调用方…

数据库学习(四)mybatis

Mybatis Mybatis是一个基于数据持久层(DAO层)的一款框架,他能极大的简化Java中连接数据库,操作数据库也就是jdbc的操作。 在定义mybatis相关接口时,不需要定义实现类,因为在程序启动时,mybati…

程序员如何兼职赚小钱?

程序员由于有技术和手艺其实兼职赚钱的路子还是挺多的,只要你有足够的时间。 1. 做外包 这是比较传统的方式,甲方在一些众包平台上发布开发任务,你可以抢这个任务,但是价格都比较便宜。 任务比较多的平台: 猪八戒、一品威客、开…

聚合支付备案新增机构名单公布,14家机构成功备案

孟凡富 3月27日,中国支付清算协会公布了最新一批收单外包服务机构备案机构结果,总备案机构为27000家,新增备案机构为648家,其中,新增聚合支付技术服务备案机构包括北京鑫杰华誉、深圳中峻、多点(深圳)数字科技、扬州泽…

Amazon SageMaker + Stable Diffusion 搭建文本生成图像模型

如果我们的计算机视觉系统要真正理解视觉世界,它们不仅必须能够识别图像,而且必须能够生成图像。文本到图像的 AI 模型仅根据简单的文字输入就可以生成图像。 近两年,以ChatGPT为代表的AIGC技术崭露头角,逐渐从学术研究的象牙塔迈…