torch.gather用法详解

torch.gather是PyTorch中的一个函数,用于从源张量中按照指定的索引张量来收集数据。

基本语法如下,

torch.gather(input, dim, index, *, sparse_grad=False, out=None) → Tensor
  • input:输入源张量
  • dim:要收集数据的维度
  • index:索引
  • sparse_grad:如果为True,则gather()在反向传播时会返回稀疏梯度
  • out:输出张量,形状与index相同

用法讲解

假设有以下输入张量x,

x = torch.tensor([[[ 1,  2],[ 3,  4]],[[ 5,  6],[ 7,  8]],[[ 9, 10],[11, 12]]
])

假设有以下索引index,

index = torch.tensor([[[0, 1],[1, 0]],[[1, 0],[0, 1]],[[0, 1],[1, 0]]
])

index的索引及里面的元素的对应关系如下,

index[0, 0, 0] = 0
index[0, 0, 1] = 1
index[0, 1, 0] = 1
index[0, 1, 1] = 0
index[1, 0, 0] = 1
index[1, 0, 1] = 0
index[1, 1, 0] = 0
index[1, 1, 1] = 1
index[2, 0, 0] = 0
index[2, 0, 1] = 1
index[2, 1, 0] = 1
index[2, 1, 1] = 0

接下来,有3种情况出现,分别是dim=0、dim=1、dim=2 

dim=0

拿index里的元素值去替换对应索引中第1个维度的数值,得到新索引,

(索引, 索引对应的元素) -> 新索引
[0, 0, 0], 0 -> [0, 0, 0]
[0, 0, 1], 1 -> [1, 0, 1]
[0, 1, 0], 1 -> [1, 1, 0]
[0, 1, 1], 0 -> [0, 1, 1]
[1, 0, 0], 1 -> [1, 0, 0]
[1, 0, 1], 0 -> [0, 0, 1]
[1, 1, 0], 0 -> [0, 1, 0]
[1, 1, 1], 1 -> [1, 1, 1]
[2, 0, 0], 0 -> [0, 0, 0]
[2, 0, 1], 1 -> [1, 0, 1]
[2, 1, 0], 1 -> [1, 1, 0]
[2, 1, 1], 0 -> [0, 1, 1]

有了新索引后,便可根据新索引从输入张量中获取输出张量,

result = torch.gather(x, 0, index)
“”“
预测值:
result = [[[x[0, 0, 0], x[1, 0, 1]],[x[1, 1, 0], x[0, 1, 1]],[[x[1, 0, 0], x[0, 0, 1],[x[0, 1, 0], x[1, 1, 1]],[[x[0, 0, 0], x[1, 0, 1], [x[1, 1, 0], x[0, 1, 1]]]]=[[[1, 6],[7, 4]],[[5, 2],[3, 8]],[[1, 6],[7, 4]]]
”“”

打印输出张量, 

print(result)
"""
实际值:
tensor([[[1, 6],[7, 4]],[[5, 2],[3, 8]],[[1, 6],[7, 4]]])
"""

dim=1

拿index里的元素值去替换对应索引中第2个维度的数值,得到新索引,

(索引, 索引对应的元素) -> 新索引
[0, 0, 0], 0 -> [0, 0, 0]
[0, 0, 1], 1 -> [0, 1, 1]
[0, 1, 0], 1 -> [0, 1, 0]
[0, 1, 1], 0 -> [0, 0, 1]
[1, 0, 0], 1 -> [1, 1, 0]
[1, 0, 1], 0 -> [1, 0, 1]
[1, 1, 0], 0 -> [1, 0, 0]
[1, 1, 1], 1 -> [1, 1, 1]
[2, 0, 0], 0 -> [2, 0, 0]
[2, 0, 1], 1 -> [2, 1, 1]
[2, 1, 0], 1 -> [2, 1, 0]
[2, 1, 1], 0 -> [2, 0, 1]

有了新索引后,便可根据新索引从输入张量中获取输出张量,

result = torch.gather(x, 0, index)
“”“
预测值:
result = [[[x[0, 0, 0], x[0, 1, 1]],[x[0, 1, 0], x[0, 0, 1]],[[x[1, 1, 0], x[1, 0, 1],[x[1, 0, 0], x[1, 1, 1]],[[x[2, 0, 0], x[2, 1, 1], [x[2, 1, 0], x[2, 0, 1]]]]=[[[1, 4],[3, 2]],[[7, 6],[5, 8]],[[9, 12],[11, 10]]]
”“”

打印输出张量, 

print(result)
"""
实际值:
tensor([[[ 1,  4],[ 3,  2]],[[ 7,  6],[ 5,  8]],[[ 9, 12],[11, 10]]])
"""

dim=3

拿index里的元素值去替换对应索引中第3个维度的数值,得到新索引,

(索引, 索引对应的元素) -> 新索引
[0, 0, 0], 0 -> [0, 0, 0]
[0, 0, 1], 1 -> [0, 0, 1]
[0, 1, 0], 1 -> [0, 1, 1]
[0, 1, 1], 0 -> [0, 1, 0]
[1, 0, 0], 1 -> [1, 0, 1]
[1, 0, 1], 0 -> [1, 0, 0]
[1, 1, 0], 0 -> [1, 1, 0]
[1, 1, 1], 1 -> [1, 1, 1]
[2, 0, 0], 0 -> [2, 0, 0]
[2, 0, 1], 1 -> [2, 0, 1]
[2, 1, 0], 1 -> [2, 1, 1]
[2, 1, 1], 0 -> [2, 1, 0]

有了新索引后,便可根据新索引从输入张量中获取输出张量,

result = torch.gather(x, 0, index)
“”“
预测值:
result = [[[x[0, 0, 0], x[0, 0, 1]],[x[0, 1, 1], x[0, 1, 0]],[[x[1, 0, 1], x[1, 0, 0],[x[1, 1, 0], x[1, 1, 1]],[[x[2, 0, 0], x[2, 0, 1], [x[2, 1, 1], x[2, 1, 0]]]]=[[[1, 2],[4, 3]],[[6, 5],[7, 8]],[[9, 10],[12, 11]]]
”“”

打印输出张量, 

print(result)
"""
实际值:
tensor([[[ 1,  2],[ 4,  3]],[[ 6,  5],[ 7,  8]],[[ 9, 10],[12, 11]]])
"""

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

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

相关文章

2.4G射频收发芯片 KT8P01,非常适合超低功耗(ULP)的无线应用

KT8P01是一颗低成本、高性能的智能2.4 GHz射频收发芯片,内置单片机。KT8P01经过优化,提供了单芯片解决方案,适用于超低功耗(ULP)的无线应用。处理能力、存储器、低功率振荡器、实时计数器以及一系列省电模式的组合为RF…

Vue + Cesium(之一)

Vue项目如何初始化Cesium: 一.远程引入Cesium: 1.安装Cesium npm install cesium二.本地加载Cesium: Cesium的属性: 一. 维度 平面 二维 三维 二.空间分析 距离测量 面积测量 区域分析 清除 三.专题图层 码头信息 泊位信息 仓库 仓库区 …

SQL连接查询

连接查询: 同时涉及多个表的查询称为连接查询。 SQL中连接查询的主要类型 (1) 交叉连接(广义笛卡尔积) (2) 等值连接 (3) 自身连接 (4) 内连接 (5) 外连接 1.交叉连接 使用笛卡尔积运算的连接方式 笛卡尔积运算:设A&#xff…

基于Python的LSTM网络实现单特征预测回归任务(PyTorch版)

目录 一、数据集 二、任务目标 三、代码实现 1、从本地路径中读取数据文件 2、数据归一化 3、创建配置类,将LSTM的各个超参数声明为变量,便于后续使用 4、创建时间序列数据 5、划分数据集 6、将数据转化为PyTorch张量 7、将数据加载成迭代器 …

【栈】Leetcode 84. 柱状图中最大的矩形【困难】

柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释&#…

[阅读笔记1][GPT-3]Language Models are Few-Shot Learners

首先讲一下GPT3这篇论文,文章标题是语言模型是小样本学习者,openai于2020年发表的。 这篇是在GPT2的基础上写的,由于GPT2还存在一些局限,这篇对之前的GPT2进行了一些完善。GPT2提出了多任务学习,也就是可以零样本地用在…

第九、十章 异常、模块、包以及数据可视化

第九章 异常、模块、包 异常 捕获异常 捕获常规异常 # 捕获常规异常 try:f open("D:/abc.txt", "r", encoding "UTF-8") except:print("出现异常了,因为文件不存在,我将open的模式,改为w模式去打开&qu…

SpringBoot 配置 jedis 来连接redis

Maven依赖 首先配置 maven依赖,这个依赖,要结合自己的springboot 的版本去选, 如果想要看自己的springboot 版本 在 启动类中去 加入,这两行代码 String version SpringBootVersion.getVersion(); log.info("***SpringBo…

大唐杯题目

5G NR 系统中,UE 收到 RRCSetup后,可能会有以下哪些过程 A.进入 RRC CONNECTED,停止小区重选: B.如果 NAS 层提供了多个S-NSSAI,则写入 s-nssai-List; C.发送 RRCSetupComplete. D.UE 启动 T300,将 RRCSetupReguest 消…

数据结构 -- 二叉树

简介 : 二叉树有左右两个子节点 ; 我们可以用一个包含左孩子和右孩子的结构体数组来存储二叉树 : const int N 1e6 10 ;// 存储 : struct Node{int l , r ; }a[N]; 读入 : for(int i1;i<n;i) cin >> a[i].l >> a[i].r ; 用链表实现参考 : 二叉树…

from表单的作用、组成和用法

from表单的作用表单在网页中主要负责数据采集功能&#xff0c;它用<form>标签定义。用户输入的信息都要包含在form标签中&#xff0c;点击提交后&#xff0c;<form>和</form>里面包含的数据将被提交到服务器或者电子邮件里&#xff0c;经过服务器上的 ASP 或…

中国联通,互联互通:构建全国乃至全球云服务网络

广泛覆盖&#xff0c;互联互通&#xff1a;构建全国乃至全球云服务网络 中国联通云联网凭借其广泛的覆盖范围和强大的互联互通能力&#xff0c;为企业提供了前所未有的云资源接入便利。在国内&#xff0c;云联网已覆盖至中国境内的334个城市&#xff0c;几乎触及每一处有业务需…

LeetCode:203.移除链表元素

&#x1f3dd;1.问题描述&#xff1a; &#x1f3dd;2.实现代码&#xff1a; typedef struct ListNode ListNode; struct ListNode* removeElements(struct ListNode* head, int val) {if(headNULL)return head;ListNode *NewHead,*NewTail;ListNode *pcurhead;NewHeadNewTail…

【C++】C++11右值引用

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.什么是左值&&…

HCIP——HCIA回顾(笔记)

OSI OSI -- 开放式系统互联参考模型&#xff08;7层参考模型&#xff09; 应用层 抽象语言 -》编码 表示层 编码-》二进制 会话层 提供应用程序的会话地址 传输层 分段 数据包容量不易过大&#xff0c;否则影响传输效率及共享宽带&#xff1b;分段大小由MTU决定&…

python前端tkinter

基础窗口展示&#xff1a; import tkinter as tknewWin tk.Tk() newWin.title("Im a new window!") newWin.geometry("400x300500300") #设置窗口的大小以及初始位置lab tk.Label(newWin) #lab tk.Label() lab.config(text "Im a new label!&q…

积极探索新质生产力,九河云携手华为云技术交流引领数智跃迁

4月18日&#xff0c;九河云携手华为云举办了华为云SA技术培训会议&#xff0c;培训邀请到华为云技术人员作为主讲人&#xff0c;通过理论讲解与案例结合的方式&#xff0c;围绕ECS和EBS之间的联动&#xff0c;调优和数据保护等方面展开&#xff0c;深入浅出地讲解了基于EBS部署…

常用UI组件

一、文本组件 1.1 概述 Text为文本组件&#xff0c;用于显示文字内容 1.2 参数 Text组件的参数类型为string | Resource Entry Component struct Index {build() {Column({space : 50}) {Text(你好).fontSize(50)}.width(100%).height(100%).justifyContent(FlexAlign.Cent…

便携式HD-SDI模拟源测试设备

便携式HD-SDI模拟源测试设备 平台简介 便携式手提CameraLink模拟源测试设备&#xff0c;以PCIe的HD-SDI播出卡和X86主板为基础&#xff0c;构建便携式的手提设备。 平台默认操作系统为win7 64位系统&#xff1b;具备丰富的外设接口&#xff0c;如VGA、HDMI、千兆网口、USB2.0/3…

HCIP——MPLS(笔记)

MPLS--多协议标签交换技术 包交换 数据组成数据包&#xff0c;之后&#xff0c;在各个网络节点中不断传递&#xff0c;最终到达目标。包交换转发效率不高的问题所在&#xff1a;1&#xff0c;在整个包交换的过程中&#xff0c;需要先查询路由表之后再查看ARP缓存表两张表来完…