码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • pytorch中gather函数的理解


    pytorch函数gather理解

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

    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
    
    • 1
    • 2
    • 3

    直观理解

    原始tensor ,名称为a

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

    以下以 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]]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    此时,第一个维度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]
    
    • 1

    因此,如果选择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

  • 相关阅读:
    【Swift 60秒】51 - Closures as parameters
    求平均查找长度(成功+失败)
    五万字图文和代码详解kafka的安装与开启ACL权限控制,自定义SASL、ACL存储形式,实际项目使用案例剖析,kafka常用cmd命令使用总结及示例
    python yaml库:safe_load()(安全解析函数,解析yaml)(防止yaml文件中包含恶意代码)
    【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
    Get请求如何传递数组、对象
    海外媒体发稿:出口贸易媒体发稿16个超实用技巧-华媒舍
    vue2 系列:自定义 v-model
    基于maven+ssm 框架(SpringMVC、Spring、MyBatis)的图书管理系统
    负载姜黄素的葡聚糖修饰的钆掺杂的空心介孔二氧化硅纳米材料(科研级)
  • 原文地址:https://blog.csdn.net/weixin_43707042/article/details/134539786
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号