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发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
python发送arp欺骗攻击代码分析
Jan 16 Python
Python中变量交换的例子
Aug 25 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
Python Nose框架编写测试用例方法
Oct 26 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
python datetime处理时间小结
Apr 16 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
Python如何读写二进制数组数据
Aug 01 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
pandas 实现将NaN转换为None
May 14 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读取csv实现csv文件下载功能
2013/12/18 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
BootStrap TreeView使用实例详解
2017/11/01 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
Python 错误和异常小结
2013/10/09 Python
python实现文件快照加密保护的方法
2015/06/30 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
python生成密码字典的方法
2018/07/06 Python
Python tkinter label 更新方法
2018/10/11 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
会计求职信范文
2014/05/24 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
禁毒宣传标语
2014/06/19 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL