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

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

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

相关文章

fiddler 手机抓包

前置步骤参考:手把手教你如何配置fiddler、并开启手机代理抓包、最详细_fiddler抓socks5_赴梦、的博客-CSDN博客 后续: 问:fiddler 证书已安装 在 iphone, 访问网站,报错, 此链接非私人链接 gpt: 如果你在使用 Fiddl…

正射影像矫正--基于无人机图片

1.大致总体过程 这是通过为每个较小的正射影像定义一个多边形来实现的,这些多边形由接缝线分隔。要创建初始的接缝线网络,可以使用 Voronoi 图算法。 以下是该过程的概述: 小正交图像: 从一些较小的正交图像开始。 接缝线&…

短视频配音软件有哪些?这些常用的短视频配音软件

短视频行业近年来发展得很快,几乎闯入了我们每个现代人的生活,它以其独有的特点和乐趣,也收获了大批短视频爱好者,配音是短视频创作过程中不可或缺的环节,今天,我们就来聊聊短视频配音及好用的配音软件。 短…

一文读懂 Linux 网络 IO 模型

文章目录 1.从一个问题说起2.多进程模型3.多线程模型4.I/O 多路复用5.select、poll、epoll 的区别?5.1 select5.2 poll5.3 epoll5.4 两种事件触发模式 参考文献 1.从一个问题说起 互联网发展历史上,曾经有一个著名的问题:C10K 问题。 C 是 …

【SpringBoot】 环境准备

一.SpringBoot准备 1.下载idea 社区版 2021.1 - 2022.1.4 专业版 无要求 2.Maven 是一个工具,和Java没有关系 . 主要功能是项目构建和依赖管理. 项目构建 上述对应的都是maven命令 . 依赖管理 添加坐标之后,点击刷新,右侧就会载入依赖. Maven还有依赖传递和依赖排除功…

【Mysql学习笔记】- 2 多表查询

一、加强查询 where子句,oder by子句 -- 查询加强 -- ■ 使用where子句 -- ?如何查找1992.1.1后入职的员工 -- 老师说明: 在mysql中,日期类型可以直接比较, 需要注意格式 SELECT * FROM empWHERE hiredate > 1992-01-01 -- ■ 如何使用like操作符…

局域网文件共享神器:Landrop

文章目录 前言解决方案Landrop软件界面手机打开效果 软件操作 前言 平常为了方便传文件,我们都是使用微信或者QQ等聊天软件,互传文件。这样传输有两个问题: 必须登录微信或者QQ聊天软件。手机传电脑还有网页版微信,电脑传手机比…

Linux 环境配置小白入门

Linux从 全栈开发centOS 7 到 运维 一 Linux 入门概述1.1 操作系统1.2 Linux 简介1.3 Linux 系统组成1.4 Linux 发行版1.5 Linux 应用领域1.6 Linux vs Windows 二 虚拟机2.1 虚拟机介绍2.2 VMware WorkStation 安装2.3 VMware WorkStation 配置检查2.3 安装 CentOS 72.3.1 安装…

代码随想录算法训练营|五十九~六十天

下一个更大元素|| 503. 下一个更大元素 II - 力扣(LeetCode) 和每日温度一样的套路,就是这里可以循环数组,两个数组拼接,然后循环两遍就行。 public class Solution {public int[] NextGreaterElements(int[] nums)…

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

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

Python Opencv实践 - 二维码和条形码识别

使用pyzbar模块来识别二维码和条形码。ZBar是一个开源软件,用来从图像中读取条形码,支持多种编码,比如EAN-13/UPC-A、UPC-E、EAN-8、代码128、代码39、交错2/5以及二维码。 pyzbar是python封装ZBar的模块,我们用它来做条形码和二维码的识别。…

c++ ,python监控 进程 状态 fork

【精选】操作系统实验二 观察Linux进程状态_linux什 么时候出现运行状态、暂停状态、可中断阻塞状 态、不可中断阻塞状态、僵_Ace2NoU的博客-CSDN博客 Linux C/C 监控进程变化_mob649e81583204的技术博客_51CTO博客 #include <sys/types.h> #include <sys/wait.h>…

C++:哈希表的模拟实现

文章目录 哈希哈希冲突哈希函数 解决哈希冲突闭散列&#xff1a;开散列 哈希 在顺序结构和平衡树中&#xff0c;元素的Key和存储位置之间没有必然的联系&#xff0c;在进行查找的时候&#xff0c;要不断的进行比较&#xff0c;时间复杂度是O(N)或O(logN) 而有没有这样一种方案…

Python_WebSocket服务器和Python_JavaScript客户端

简述&#xff1a; Python创建WebSocket服务器和客户端Python创建WebSocket服务器和JavaScript创建客户端Python 异步网络WebSocket应用 在本文中&#xff0c;将讨论 WebSocket客户端和服务器之间的单个长期连接。 我将解释无状态 HTTP 协议的问题&#xff0c;以及 WebSocket 如…

审计dvwa高难度命令执行漏洞的代码,编写实例说明如下函数的用法

审计dvwa高难度命令执行漏洞的代码 &#xff0c;编写实例说明如下函数的用法 代码&#xff1a; <?phpif( isset( $_POST[ Submit ] ) ) {// Get input$target trim($_REQUEST[ ip ]);// Set blacklist$substitutions array(& > ,; > ,| > ,- > ,$ …

SSM框架(二):AOP和事物

文章目录 一、AOP的介绍1.1 基本概念1.2 AOP入门1.3 AOP工作流程1.4 切入点表达式1.5 AOP的通知类型1.6 ProceedingJoinPoint1.7 AOP通知获取参数数据 二、事物2.1 基本介绍2.2 事物角色2.3 事物属性2.4 事物的传播行为 一、AOP的介绍 1.1 基本概念 1.2 AOP入门 导入坐标 <…

linux之chmod命令

在linux系统中经常遇到需要对文件修改读写执行的权限&#xff0c;下面对chomod命令进行梳理总结。 1、文件权限 在linux系统中&#xff0c;每个文件都有归属的所有者和所有组&#xff0c;并且规定了文件的所有者、以及其他人对文件所拥有的可读&#xff08;r&#xff09;、可写…

C# System.Array.CopyTo() 和 System.Array.Clone() 有什么区别

System.Array.CopyTo() 和 System.Array.Clone() 是用于数组复制的两种不同方法&#xff0c;它们在实现和用途上有一些区别。 System.Array.CopyTo() 方法&#xff1a; CopyTo() 方法用于将数组的元素复制到另一个数组。它是 Array 类的实例方法&#xff0c;可以用于复制一个…

Intel Xeon 处理器系列

Intel Xeon 处理器是专为服务器和工作站设计的&#xff0c;其型号命名和分级体系相对复杂&#xff0c;涵盖了从入门级到高端的各种应用。以下是 Intel Xeon 处理器的一些主要分类和型号&#xff0c;以及它们各自的特点和用途&#xff1a; 1. Xeon E 系列 Xeon E3: 针对小型企…

gitlab 实战

一.安装依赖 yum install -y curl policycoreutils-python openssh-server perl 二.安装gitlab yum install gitlab-jh-16.0.3-jh.0.el7.x86_64.rpm 三.修改下面的 vim /etc/gitlab/gitlab.rbexternal_url http://192.168.249.156 四.初始化 gitlab-ctl reconfigure 五.查看状…