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实现的石头剪子布代码分享
Aug 22 Python
python连接mysql实例分享
Oct 09 Python
回调函数的意义以及python实现实例
Jun 20 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
Python tkinter事件高级用法实例
Jan 31 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 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
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
php学习笔记之基础知识
2014/11/08 PHP
PHP简单日历实现方法
2016/07/20 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
python实现图片批量剪切示例
2014/03/25 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
卫校毕业生自我鉴定
2013/10/31 职场文书
团结演讲稿范文
2014/05/23 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
个人事迹材料范文
2014/12/29 职场文书
兴趣班停课通知
2015/04/24 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers