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算法学习之桶排序算法实例(分块排序)
Dec 18 Python
python用字典统计单词或汉字词个数示例
Apr 22 Python
python快速查找算法应用实例
Sep 26 Python
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 Python
Python实现的选择排序算法示例
Nov 29 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
对django中foreignkey的简单使用详解
Jul 28 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
详解python中eval函数的作用
Oct 22 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 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
实用函数3
2007/11/08 PHP
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
PHP静态文件生成类实例
2014/11/29 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
Python模块搜索路径代码详解
2018/01/29 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
python manage.py runserver流程解析
2019/11/08 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
极简的HTML5模版
2015/07/09 HTML / CSS
EJB的角色和三个对象
2015/12/31 面试题
餐厅经理岗位职责范本
2014/02/17 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
销售2014年度工作总结
2014/12/08 职场文书
行政文员岗位职责
2015/02/04 职场文书
个人更名证明
2015/06/23 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python