pytorch中gather函数的理解

pytorch函数gather理解

torch.gather(input, dim, index, out=None) → Tensor 

Parameters:

  • input (Tensor) – 源张量
  • dim (int) – 索引的轴
  • index (LongTensor) – 聚合元素的下标(index需要是torch.longTensor类型)
  • out (Tensor, optional) – 目标张量

公式含义

这个函数的意义就是可以重新排列特定维度的信息。对一个三维张量,从公式来看,输出是下面这种,就是在特定维度上,用索引index下标代替所在位置的值。

out[i][j][k] = input[index[i][j][k]][j][k]  # if dim == 0
out[i][j][k] = input[i][index[i][j][k]][k]  # if dim == 1
out[i][j][k] = input[i][j][index[i][j][k]]  # if dim == 2

直观理解

原始tensor ,名称为a

a = torch.randint(0, 30, (2, 3, 5))

以下以 CxHxW的维度讲述,其中C=2,H=3, W=5,
在这里插入图片描述

index = torch.LongTensor([[[0,1,2,0,2],
                          [0,0,0,0,0],
                          [1,1,1,1,1]],
                        [[1,2,2,2,2],
                         [0,0,0,0,0],
                         [2,2,2,2,2]]])

指定dim = 1,也就是在第二个维度上H重新排列,

b = torch.gather(a, 1,index)

此时,第一个维度C是不会改变的,还是存在两个通道C,分别是a[0]和a[1],
针对a[0]或者a[1] , 在高度维度H上,分别是3行,a[0][0:2] a[1][0:2]。即

a[0].shape == [3,5]

因此,如果选择dim=1,则index 张量里面的数必须在0-2之间,不然会越界,
下一步就是选取数字了。
针对每一个通道C,输出张量b,只需要按照index重新排列矩阵即可
例如在第b[0,1,2]的位置,则选择a[0][index[0,1,2]][2]的值进行代替即可。

同理在其他维度也是一样。

注意点

需要注意的是索引矩阵不能越界,例如针对上述a[2,3,5],
如果指定dim=0,则index里面的数不能超过1,指定dim=1,则index不能超过2,指定dim=3,则index不能超过4

本文参考https://www.jianshu.com/p/5d1f8cd5fe31

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

股票自选(四)

4-自选 自选表功能,均需要使用 Token 令牌进行操作,目的是为了将数据隔离。 添加自选表的作用是进行推送, 将 自选表中的近十天的涨跌幅情况通过邮箱的方式推送给对应的用户。 一. 添加到自选表 接口描述: 接口地址:/StockApi/stockSele…

转录组学习第四弹-数据质控

数据质控 将SRR转为fastq之后,我们需要对fastq进行质量检查,排除质量不好的数据 1.质量检查,生成报告文件 ls *fastq.gz|while read id;do fastqc $id;done并行处理 ls *fastq.gz|xargs fastqc -t 102.生成 html 报告文件和对应的 zip 压缩…

阿里巴巴对裁员谣言报警

我是卢松松,点点上面的头像,欢迎关注我哦! 前两天王自如言论事件,格力选择了报警,称高管遭到姊妹集体侮辱诽谤。 而这两天,阿里巴巴也报警了,原因是网传阿里巴巴要裁员25000人。 咱不公关了…

见证历史!合资车企「最后一搏」

从上海车展,到广州车展,最大的变化莫过于传统合资品牌在新能源及智能电动市场的持续发力。或许,2024年将是最后一搏的拐点。 在本届广州车展上,广汽丰田发布了全新新能源品牌铂智,铂智品牌旗下首款产品铂智4X正式亮相。…

数据结构(c语言版) 树的遍历

作业要求 以如下图为例,完成树的遍历: 1、利用孩子兄弟表示法的存储结构 2、利用先根序列创建树 3、先根遍历树 4、后根遍历树 思考 预期的结果应该为: 1、先根创建树时需要输入的数据为: A B E 0 F 0 0 C 0 D G 0 0 0 0 2、…

Android codec2 视频框架之输出端的内存管理

文章目录 前言setSurfacestart从哪个pool中申请buffer解码后框架的处理流程renderOutbuffer 输出显示 前言 输出buffer整体的管理流程主要可以分为三个部分: MediaCodc 和 应用之间的交互 包括设置Surface、解码输出回调到MediaCodec。将输出buffer render或者rele…

使用JMX监控ZooKeeper和Kafka

JVM 默认会通过 JMX 的方式暴露基础指标,很多中间件也会通过 JMX 的方式暴露业务指标,比如 Kafka、Zookeeper、ActiveMQ、Cassandra、Spark、Tomcat、Flink 等等。掌握了 JMX 监控方式,就掌握了一批程序的监控方式。本节介绍 JMX-Exporter 的使用,利用 JMX-Exporter 把 JMX…

win11,无法修改文件的只读属性,解决办法

在尝试更改文件或文件夹的权限时,您可能经常会遇到错误 - 无法枚举容器中的对象访问被拒绝。 虽然作为管理员,您可以更改访问权限,但有时即使是管理员也可能会遇到相同的错误消息。 这是一个常见错误,通常由不同论坛上的用户提出…

【云原生-Kurbernetes篇】HPA 与 Rancher管理工具

文章目录 一、Pod的自动伸缩1.1 HPA1.1.1 简介1.1.2 HPA的实现原理1.1.3 相关命令 1.2 VPA1.2.1 简介1.2.2 VPA的组件1.2.3 VPA工作原理 1.3 metrics-server简介 二、 HPA的部署与测试2.1 部署metrics-serverStep1 编写metrics-server的配置清单文件Step2 部署Step3 测试kubect…

Python数据结构基础教学,从零基础小白到实战大佬!

文章目录 前言 Python有那几种数据结构?1)列表(list)1.1 什么是列表?1.2列表的增删改查 2)字典(Dictionary)2.1 什么是字典?2.2 字典的增删改查 3)元组(Tuple)4)集合(Set…

STM32通用定时器产生PWM信号

STM32通用定时器产生PWM信号 PWM信号stm32定时器PWM生成模式PWM配置基本步骤PWM周期计算CubeMX配置代码展现 本期内容我将展示使用STM32通用定时器产生PWM信号,这里以定时器3通道3为例 PWM信号 如果还不懂的话,可以看看 : “蓝桥杯单片机学习…

SSM框架(一):Spring 容器

文章目录 一、Spring Framework系统框架二、IoC控制反转 与 DI依赖注入 简单入门三、Bean3.1 Bean的配置3.2 实例化Bean的四种方式3.3 Bean的生命周期 四、依赖注入4.1 setter注入4.2 构造器注入4.3 注入方式选择4.4 依赖自动装配4.5 集合注入4.6 案例:配置数据库4.…

Android加固为何重要?很多人不学

为什么要加固? APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换,包括不限于隐藏,混淆,加密等操作,进一步保护软件的利益不受损坏。总结主要有以下三方面预期效果: 1.防篡改&#x…

JSP在线商城系统eclipse定制开发mysql数据库BS模式java编程B2C

一、源码特点 java 在线商城系统是一套完善的web设计系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用…

Redis事务+秒杀案例

Redis事务是一个单独的隔离操作,是指将多条命令放在一个命令队列当中,按顺序执行,保证多个命令在同一个事务中执行而不受其他客户端的影响。 通俗来说就是:串联多个命令防止别的命令插队。 1.Multi、Exec、discard 在输入Multi命…

基于非链式(数组)结点结构的二叉树的层序、先序、中序、后序输入创建以及层序、先序、中序、后序输出

这个系列来记录学习一下如何用数组完成二叉树的4种顺序的创建,以及其4种顺序的遍历。 我们知道,对于一棵二叉树而言它有4种遍历的顺序,那自然就导致其输入结点时,也分这四种顺序。 分别是—— 层序: …

STM32定时器输入捕获测量高电平时间

STM32定时器输入捕获测量高电平时间 输入捕获测量高电平时间CuebMX配置代码部分 本篇内容要求读者对STM32通用定时器有一点理解,如有不解,请看 夜深人静学32系列15——通用定时器 输入捕获 输入捕获是STM32通用定时器的一种功能,可以捕获特定…

Selenium自动化测试详解

最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的…

微信小程序记住密码,让登录解放双手

密码是用户最重要的数据,也是系统最需要保护的数据,我们在登录的时候需要用账号密码请求登录接口,如果用户勾选记住密码,那么下一次登录时,我们需要将账号密码回填到输入框,用户可以直接登录系统。我们分别…

从零开始的c语言日记day35——数据在内存中的储存

数据类型介绍 之前已经学了了一些基本的内置类型,以及空间大小。 类型的意义: 使用这个类型开辟内存空间的大小(大小决定了使用范围)。如何看待内存空间的视角 类型的基本归类 整形: 字符的本质是ASCLL码值&#x…