码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • pytorch中gather函数详解【包你看懂,我敢说在CSDN上没人解释的比我清楚】


    在看centernet中遇到gather函数,看了好几个博客也都没咋看懂,直到看了这个视频链接,在此感谢这位哔站up主。

    直接先看代码:

    import torch
    a = torch.arange(15).view(3, 5)
    b = torch.zeros_like(a)
    b[1][2] = 1
    b[0][0] = 1
    print(a)
    print(b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出:

    tensor([[ 0,  1,  2,  3,  4],
            [ 5,  6,  7,  8,  9],
            [10, 11, 12, 13, 14]])
    tensor([[1, 0, 0, 0, 0],
            [0, 0, 1, 0, 0],
            [0, 0, 0, 0, 0]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    代码:

    c = a.gather(0, b) # dim=0
    d = a.gather(1, b) # dim=1
    print(c)
    print(d)
    
    • 1
    • 2
    • 3
    • 4

    输出:

    tensor([[5, 1, 2, 3, 4],
            [0, 1, 7, 3, 4],
            [0, 1, 2, 3, 4]])
    tensor([[ 1,  0,  0,  0,  0],
            [ 5,  5,  6,  5,  5],
            [10, 10, 10, 10, 10]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    首先解释一下什么是dim=0和dim=1,其实0和1是索引矩阵b在被索引矩阵a索引的位置,例如dim=0,以3维为例,
    output [ i ] [ j ] [ k ] [i][j][k] [i][j][k]=input [ i n d e x [ i ] [ j ] [ k ] ]    [ j ] [ k ] [index[i][j][k]]\ \ [j][k] [index[i][j][k]]  [j][k]
    dim=1,
    output [ i ] [ j ] [ k ] [i][j][k] [i][j][k]=input [ i ]   [ i n d e x [ i ] [ j ] [ k ] ]   [ k ] [i]\ [index[i][j][k]]\ [k] [i] [index[i][j][k]] [k]

    上面的代码中,c、d为output,a为input,b为index,
    所以c = a.gather(0, b) # dim=0,
    c[0][0]=a[b[0][0]] [0]=a[1][0]=5
    c[0][1]=a[b[0][1]] [1]=a[0][1]=1
    c[0][2]=a[b[0][2]] [2]=a[0][2]=2
    。。。依此类推
    c = a.gather(0, b) # dim=1,
    c[0][0]=a[0][b[0][0]]=a[0][1]=1
    c[0][1]=a[0][b[0][1]]=a[0][0]=0
    c[0][2]=a[0][b[0][2]]=a[0][0]=0

    c[1][0]=a[1][b[1][0]]=a[1][0]=5
    c[1][1]=a[1][b[1][1]]=a[1][0]=5
    c[1][2]=a[1][b[1][2]]=a[1][1]=6
    。。。依此类推

  • 相关阅读:
    .net6 WebApi 如何将变量注入到控制器 以及配置文件的读取
    吴恩达 Chatgpt prompt 工程--1.Guidelines
    基数排序详解(LSD方法+MSD方法+思路+图解+代码)
    吴恩达《机器学习》9-1-9-3:反向传播算法、反向传播算法的直观理解
    python zip函数
    MLX90614红外测温传感器使用arduino采集温度数据OLED显示
    ELK Kibana搜索框模糊搜索包含不包含
    如何分析Activity被relaunch原因
    基于单片机设计的智能窗帘控制系统
    【开源】基于Vue.js的计算机机房作业管理系统的设计和实现
  • 原文地址:https://blog.csdn.net/qq_23022733/article/details/126072740
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号