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 代码优化详解
Oct 27 Python
在Python中使用__slots__方法的详细教程
Apr 28 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
python多线程http压力测试脚本
Jun 25 Python
python验证码图片处理(二值化)
Nov 01 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
python安装后的目录在哪里
Jun 21 Python
conda安装tensorflow和conda常用命令小结
Feb 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
PHP+MYSQL 出现乱码的解决方法
2008/08/08 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
非常实用的php验证码类
2016/05/15 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
python中的代码编码格式转换问题
2015/06/10 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
python Pygame的具体使用讲解
2017/11/03 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
Django视图扩展类知识点详解
2019/10/25 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
2014年两会学习心得体会
2014/03/10 职场文书
小组口号大全
2014/06/09 职场文书
创业计划书之书店
2019/09/10 职场文书
七个Python必备的GUI库
2021/04/27 Python
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL