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实现简单的计时器功能函数
Mar 14 Python
从Python的源码浅要剖析Python的内存管理
Apr 16 Python
Python中统计函数运行耗时的方法
May 05 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
Python3 使用cookiejar管理cookie的方法
Dec 28 Python
用python打印1~20的整数实例讲解
Jul 01 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
Keras搭建自编码器操作
Jul 03 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 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生成二维码的两种方法(带logo图像)
2014/03/14 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
php实现学生管理系统
2020/03/21 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
JS常用函数使用指南
2014/11/23 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
python实现排序算法
2014/02/14 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
Python常用类型转换实现代码实例
2020/07/28 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
python线程优先级队列知识点总结
2021/02/28 Python
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
学生思想表现的评语
2014/01/30 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
建筑投标担保书
2014/05/20 职场文书
医德医风个人总结
2015/02/28 职场文书
大学生村官工作总结2015
2015/04/09 职场文书