浅谈Pytorch中的torch.gather函数的含义


Posted in Python onAugust 18, 2019

pytorch中的gather函数

pytorch比tensorflow更加编程友好,所以准备用pytorch试着做最近要做的一些实验。

立个flag开始学习pytorch,新开一个分类整理学习pytorch中的一些踩到的泥坑。

浅谈Pytorch中的torch.gather函数的含义

今天刚开始接触,读了一下documentation,写一个一开始每太搞懂的函数gather

b = torch.Tensor([[1,2,3],[4,5,6]])
print b
index_1 = torch.LongTensor([[0,1],[2,0]])
index_2 = torch.LongTensor([[0,1,1],[0,0,0]])
print torch.gather(b, dim=1, index=index_1)
print torch.gather(b, dim=0, index=index_2)

观察它的输出结果:

1 2 3
 4 5 6
[torch.FloatTensor of size 2x3]


 1 2
 6 4
[torch.FloatTensor of size 2x2]


 1 5 6
 1 2 3
[torch.FloatTensor of size 2x3]

这里是官方文档的解释

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]

可以看出,gather的作用是这样的,index实际上是索引,具体是行还是列的索引要看前面dim 的指定,比如对于我们的栗子,【1,2,3;4,5,6,】,指定dim=1,也就是横向,那么索引就是列号。index的大小就是输出的大小,所以比如index是【1,0;0,0】,那么看index第一行,1列指的是2, 0列指的是1,同理,第二行为4,4 。这样就输入为【2,1;4,4】,参考这样的解释看上面的输出结果,即可理解gather的含义。

gather在one-hot为输出的多分类问题中,可以把最大值坐标作为index传进去,然后提取到每一行的正确预测结果,这也是gather可能的一个作用。

以上这篇浅谈Pytorch中的torch.gather函数的含义就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python入门篇之数字
Oct 20 Python
使用python生成目录树
Mar 29 Python
Python实现确认字符串是否包含指定字符串的实例
May 02 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
python字典一键多值实例代码分享
Jun 14 Python
PageFactory设计模式基于python实现
Apr 14 Python
keras 多gpu并行运行案例
Jun 10 Python
python/golang实现循环链表的示例代码
Sep 14 Python
Python包argparse模块常用方法
Jun 04 Python
使用Python开发冰球小游戏
Apr 30 Python
PyTorch中Tensor的维度变换实现
Aug 18 #Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 #Python
详解PyTorch中Tensor的高阶操作
Aug 18 #Python
浅析PyTorch中nn.Linear的使用
Aug 18 #Python
Pytorch实现GoogLeNet的方法
Aug 18 #Python
PyTorch之图像和Tensor填充的实例
Aug 18 #Python
Pytorch Tensor的索引与切片例子
Aug 18 #Python
You might like
在字符串中把网址改成超级链接
2006/10/09 PHP
AJAX的使用方法详解
2017/04/29 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
python虚拟环境完美部署教程
2019/08/06 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
python列表的逆序遍历实现
2020/04/20 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
什么是TCP/IP
2014/07/27 面试题
四年的大学生生活自我评价
2013/12/09 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
小学新教师培训方案
2014/02/03 职场文书
表决心的诗句大全
2014/03/11 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
python_tkinter弹出对话框创建
2022/03/20 Python
Promise静态四兄弟实现示例详解
2022/07/07 Javascript