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脚本操作MongoDB的教程
Apr 16 Python
python正则分析nginx的访问日志
Jan 17 Python
详解Python文本操作相关模块
Jun 22 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
python 构造三维全零数组的方法
Nov 12 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
Django REST framework内置路由用法
Jul 26 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
pytorch使用 to 进行类型转换方式
Jan 08 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 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通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
PHP类的特性实例分析
2016/09/28 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
javascript Base类 包含基本的方法
2009/07/22 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
浅谈javascript函数式编程
2015/09/06 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
python分析nignx访问日志脚本分享
2015/02/26 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Python中进程和线程的区别详解
2017/10/29 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
关于法制教育的宣传语
2015/07/13 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
贷款担保书范本
2015/09/22 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript