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 中文乱码问题深入分析
Mar 13 Python
老生常谈Python序列化和反序列化
Jun 28 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
Python基础之getpass模块详细介绍
Aug 10 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python 控制终端输出文字的实例
Jul 12 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
教你用Python爬取英雄联盟皮肤原画
Jun 13 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删除HTMl标签的三种解决方法
2013/06/30 PHP
PHP会话处理的10个函数
2015/08/11 PHP
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python赋值语句后逗号的作用分析
2015/06/08 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python实现配置文件备份的方法
2015/07/30 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
Python分支结构(switch)操作简介
2018/01/17 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
python中几种自动微分库解析
2019/08/29 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
WxPython实现无边框界面
2019/11/18 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
运动会广播稿300字
2014/01/10 职场文书
交通安全教育制度
2014/02/02 职场文书
软件项目开发计划书
2014/05/01 职场文书
停发工资证明范本
2015/06/12 职场文书
活动简报范文
2015/07/22 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
安全责任协议书范本
2016/03/23 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL