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实现html转ubb代码(html2ubb)
Jul 03 Python
批处理与python代码混合编程的方法
May 19 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
python脚本当作Linux中的服务启动实现方法
Jun 28 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
python装饰器代替set get方法实例
Dec 19 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
基于python实现上传文件到OSS代码实例
May 09 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
教你使用Pandas直接核算Excel中快递费用
May 12 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
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
详解javascript void(0)
2020/07/13 Javascript
Python urlopen 使用小示例
2008/09/06 Python
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
就业表自我评价分享
2014/02/06 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
就业意向书
2014/07/29 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
高三英语复习计划
2015/01/19 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android