PyTorch笔记之scatter()函数的使用


Posted in Python onFebruary 12, 2020

scatter() 和 scatter_() 的作用是一样的,只不过 scatter() 不会直接修改原来的 Tensor,而 scatter_() 会

PyTorch 中,一般函数加下划线代表直接在原来的 Tensor 上修改

scatter(dim, index, src) 的参数有 3 个

  • dim:沿着哪个维度进行索引
  • index:用来 scatter 的元素索引
  • src:用来 scatter 的源元素,可以是一个标量或一个张量

这个 scatter可以理解成放置元素或者修改元素

简单说就是通过一个张量 src 来修改另一个张量,哪个元素需要修改、用 src 中的哪个元素来修改由 dim 和 index 决定

官方文档给出了 3维张量 的具体操作说明,如下所示

self[index[i][j][k]][j][k] = src[i][j][k] # if dim == 0
self[i][index[i][j][k]][k] = src[i][j][k] # if dim == 1
self[i][j][index[i][j][k]] = src[i][j][k] # if dim == 2

exmaple:

x = torch.rand(2, 5)

#tensor([[0.1940, 0.3340, 0.8184, 0.4269, 0.5945],
#    [0.2078, 0.5978, 0.0074, 0.0943, 0.0266]])

torch.zeros(3, 5).scatter_(0, torch.tensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]]), x)

#tensor([[0.1940, 0.5978, 0.0074, 0.4269, 0.5945],
#    [0.0000, 0.3340, 0.0000, 0.0943, 0.0000],
#    [0.2078, 0.0000, 0.8184, 0.0000, 0.0266]])

具体地说,我们的 index 是torch.tensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]]),一个二维张量,下面用图简单说明

我们是 2维 张量,一开始进行 $self[index[0][0]][0]$,其中 $index[0][0]$ 的值是0,所以执行 $self[0][0] = x[0][0] = 0.1940$

$self[index[i][j]][j] = src[i][j] $

PyTorch笔记之scatter()函数的使用

再比如$self[index[1][0]][0]$,其中 $index[1][0]$ 的值是2,所以执行 $self[2][0] = x[1][0] = 0.2078$

PyTorch笔记之scatter()函数的使用

src 除了可以是张量外,也可以是一个标量

example:

torch.zeros(3, 5).scatter_(0, torch.tensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]]), 7)

#tensor([[7., 7., 7., 7., 7.],
#    [0., 7., 0., 7., 0.],
#    [7., 0., 7., 0., 7.]]

scatter()一般可以用来对标签进行 one-hot 编码,这就是一个典型的用标量来修改张量的一个例子

example:

class_num = 10
batch_size = 4
label = torch.LongTensor(batch_size, 1).random_() % class_num
#tensor([[6],
#    [0],
#    [3],
#    [2]])
torch.zeros(batch_size, class_num).scatter_(1, label, 1)
#tensor([[0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
#    [1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
#    [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
#    [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.]])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
Apr 08 Python
python根据京东商品url获取产品价格
Aug 09 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 Python
Django学习笔记之Class-Based-View
Feb 15 Python
Python实现的弹球小游戏示例
Aug 01 Python
python 列表降维的实例讲解
Jun 28 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
Sep 18 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
Python tkinter制作单机五子棋游戏
Sep 14 Python
利用Python批量识别电子账单数据的方法
Feb 08 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 #Python
pycharm无法导入本地模块的解决方式
Feb 12 #Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 #Python
解决pycharm同一目录下无法import其他文件
Feb 12 #Python
适合Python初学者的一些编程技巧
Feb 12 #Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 #Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 #Python
You might like
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
详解a++和++a的区别
2017/08/30 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
python装饰器实例大详解
2017/10/25 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
python 构造三维全零数组的方法
2018/11/12 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
土地转让协议书
2014/04/15 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
2015团员个人年度总结
2015/11/24 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL