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中的类,对象,方法,属性
Sep 11 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
Django 实现下载文件功能的示例
Mar 06 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
Python 切分数组实例解析
Nov 07 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
python 怎样进行内存管理
Nov 10 Python
关于的python五子棋的算法
May 02 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/03/27 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
我的javascript 函数链之演变
2011/04/07 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
教师个人工作总结范文2014
2014/11/10 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript
Python Pygame实战之塔防游戏的实现
2022/03/17 Python
在Python 中将类对象序列化为JSON
2022/04/06 Python
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js