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使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
Python实现Event回调机制的方法
Feb 13 Python
解决python文件双击运行秒退的问题
Jun 24 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
Aug 01 Python
Django 迁移、操作数据库的方法
Aug 02 Python
利用Python小工具实现3秒钟将视频转换为音频
Oct 29 Python
Python中包的用法及安装
Feb 11 Python
python绘制玫瑰的实现代码
Mar 02 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
Apr 19 Python
基于Python 的语音重采样函数解析
Jul 06 Python
深入了解Python enumerate和zip
Jul 16 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求最大子序列和的算法实现
2011/06/24 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
JavaScript DOM节点添加示例
2014/07/16 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
python用700行代码实现http客户端
2021/01/14 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
团员的自我评价
2013/12/01 职场文书
小学生打架检讨书
2014/01/26 职场文书
老师的检讨书
2014/02/23 职场文书
法人委托书范本
2014/04/04 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
语文复习计划
2015/01/19 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
用python开发一款操作MySQL的小工具
2021/05/12 Python