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之有容乃大的list(2)
Sep 15 Python
用Python解决计数原理问题的方法
Aug 04 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
python写入已存在的excel数据实例
May 03 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
Django中URL的参数传递的实现
Aug 04 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
python2.7使用scapy发送syn实例
May 05 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
python的dict判断key是否存在的方法
Dec 09 Python
Python用Jira库来操作Jira
Dec 28 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中看实例学正则表达式
2006/12/25 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
js计算页面刷新的次数
2009/07/20 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
vue项目环境变量配置的实现方法
2018/10/12 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
Python中属性和描述符的正确使用
2016/08/23 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
美国牛仔品牌:True Religion
2018/11/16 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
后勤部长岗位职责
2013/12/14 职场文书
抄作业检讨书
2014/02/17 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
初一学生期末评语
2014/04/24 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
东京审判观后感
2015/06/01 职场文书
归途列车观后感
2015/06/17 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
python中__slots__节约内存的具体做法
2021/07/04 Python
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技