专栏首页拇指笔记我对torch中的gather函数的一点理解

我对torch中的gather函数的一点理解

官方文档的解释

torch.gather(input,dim,index,out=None) → Tensor
torch.gather(input, dim, index, out=None) → Tensor
    Gathers values along an axis specified by dim.
    For a 3-D tensor the output is specified by:
    out[i][j][k] = input[index[i][j][k]][j][k]  # dim=0    out[i][j][k] = input[i][index[i][j][k]][k]  # dim=1    out[i][j][k] = input[i][j][index[i][j][k]]  # dim=2
    Parameters:
        input (Tensor) – The source tensor        dim (int) – The axis along which to index        index (LongTensor) – The indices of elements to gather        out (Tensor, optional) – Destination tensor
    Example:
    >>> t = torch.Tensor([[1,2],[3,4]])    >>> torch.gather(t, 1, torch.LongTensor([[0,0],[1,0]]))     1  1     4  3    [torch.FloatTensor of size 2x2]

举个例子

import torch
a = torch.Tensor([[1,2],                 [3,4]])
b = torch.gather(a,1,torch.LongTensor([[0,0],[1,0]]))#1. 取各个元素行号:[(0,y)(0,y)][(1,y)(1,y)]#2. 取各个元素值做行号:[(0,0)(0,0)][(1,1)(1,0)]#3. 根据得到的索引在输入中取值#[1,1],[4,3]
c = torch.gather(a,0,torch.LongTensor([[0,0],[1,0]]))#1. 取各个元素列号:[(x,0)(x,1)][(x,0)(x,1)]#2. 取各个元素值做行号:[(0,0)(0,1)][(1,0)(0,1)]#3. 根据得到的索引在输入中取值#[1,2],[3,2]

原理解释

假设输入与上同;index=B;输出为C B中每个元素分别为b(0,0)=0,b(0,1)=0 b(1,0)=1,b(1,1)=0

如果dim=0(列) 则取B中元素的列号,如:b(0,1)的1 b(0,1)=0,所以C中的c(0,1)=输入的(0,1)处元素2

如果dim=1(行) 则取B中元素的列号,如:b(0,1)的0 b(0,1)=0,所以C中的c(0,1)=输入的(0,0)处元素1

总结如下:输出 元素 在 输入张量 中的位置为:输出元素位置取决于同位置的index元素 dim=1时,取同位置的index元素的行号做行号,该位置处index元素做列号 dim=0时,取同位置的index元素的列号做列号,该位置处index元素做行号。

最后根据得到的索引在输入中取值

index类型必须为LongTensor gather最终的输出变量与index同形。

本文分享自微信公众号 - 拇指笔记(shuzhi990),作者:拇指笔记

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【动手学深度学习笔记】之自定义层

    神经网络中存在着全连接层、卷积层、池化层和循环层等各种各样的层。虽然PyTorch提供了大量常用的层,但有时还是需要我们自定义层。本篇文章介绍如何使用Modul...

    树枝990
  • 据说这才是看热搜的正确方法?

    最近比较忙,但是我又想关注关注微博知乎发生了什么事,所以写了一个定时发送邮件的程序告诉我当前天气和热搜。

    树枝990
  • 三步修改jupyter notebook主题和页面宽度

    最近每天都对着jupyter notebook的默认主题,感觉实在是单调了点。而且jupyter notebook的宽度,实在是让人难受...

    树枝990
  • 物联网设备已沦陷,咖啡机也不能例外

    随着物联网设备的广泛使用,被黑客攻击的范围也在不断扩大,我们周边的智能设备是网络犯罪者们首要选择的攻击目标。那么咖啡机又怎能例外呢?联网的咖啡机会成为黑客入侵网...

    FB客服
  • 决策树

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    于小勇
  • day03.集群部署zookeeper【大数据教程】

    day03.集群部署zookeeper【大数据教程】 一、Nginx/keepalived/lvs的介绍 1. nginx 1.1. nginx简介 Ngin...

    Java帮帮
  • 教程 | PyTorch经验指南:技巧与陷阱

    项目地址:https://github.com/Kaixhin/grokking-pytorch

    机器之心
  • Reset CSS(CSS初始化)总结

    用户1696846
  • 百页课程笔记,统计物理视角下的深度学习

    近日,哥德堡大学物理系 Bernhard Mehlig 教授在 arXiv 上发布了他的一本「新书」《Artifical Neural Networks》。这本...

    机器之心
  • 利用直播app源码搭建平台的3大基本步骤

    直播app源码作为直播平台的脊柱,需要投资者不断的去了解它,熟悉它,而明确它的开发步骤就是其中必不可少的环节之一。那么利用直播app源码搭建直播间需要经历哪几个...

    就爱吃小笼包

扫码关注云+社区

领取腾讯云代金券