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中random模块用法实例分析
May 19 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
Flask框架实现给视图函数增加装饰器操作示例
Jul 16 Python
padas 生成excel 增加sheet表的实例
Dec 11 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
python判断自身是否正在运行的方法
Aug 08 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
python 如何在list中找Topk的数值和索引
May 20 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
世界收音机发展史
2021/03/01 无线电
PHP 事件机制(2)
2011/03/23 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
vue中的scope使用详解
2017/10/29 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python中的计时器timeit的使用方法
2017/10/20 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
美国休闲服装品牌:Express
2016/09/24 全球购物
廉洁教育学习材料
2014/05/19 职场文书
社会学专业求职信
2014/07/17 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
入党函调证明材料
2015/06/19 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python