PyTorch笔记之scatter()函数的使用

 更新时间:2020年02月12日 11:10:18   作者:那少年和狗  
这篇文章主要介绍了PyTorch笔记之scatter()函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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] $

再比如$self[index[1][0]][0]$,其中 $index[1][0]$ 的值是2,所以执行 $self[2][0] = x[1][0] = 0.2078$

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实现nc批量转tif格式

    基于Python实现nc批量转tif格式

    做项目有时会运用到netCDF格式的气象数据,而ArcGIS中需要用栅格影像进行处理,对于较多的文件,ArcGIS一个个手动转换过于繁琐,因此我们采用Python进行转换,下面就是Python实现nc批量转tif格式的示例代码,希望对你有所帮助
    2022-08-08
  • tensorflow卷积神经Inception V3网络结构代码解析

    tensorflow卷积神经Inception V3网络结构代码解析

    这篇文章主要为大家介绍了卷积神经Inception V3网络结构代码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Pycharm安装第三方库、安装位置以及镜像设置方法详解

    Pycharm安装第三方库、安装位置以及镜像设置方法详解

    对于Python开发用户来讲,安装第三方库是家常便饭,下面这篇文章主要给大家介绍了关于Pycharm安装第三方库、安装位置以及镜像设置方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • python中and和or逻辑运算符的用法示例

    python中and和or逻辑运算符的用法示例

    python中的逻辑运算符有两种返回值,python运算符除了能操作bool类型表达式,还能操作其他所有类型的表达式,这篇文章主要给大家介绍了关于python中and和or逻辑运算符用法的相关资料,需要的朋友可以参考下
    2022-01-01
  • Python实现文件及文件夹操作大全

    Python实现文件及文件夹操作大全

    在日常工作或生活中,总避免不了需要操作文件或文件夹,本文主要介绍了Python实现文件及文件夹操作大全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • python入门游戏之井字棋实例代码

    python入门游戏之井字棋实例代码

    python井字棋游戏虽然看上去非常简陋,但是却非常值得学习,下面这篇文章主要给大家介绍了关于python入门游戏之井字棋的相关资料,需要的朋友可以参考下
    2021-11-11
  • Ubuntu配置Python环境的超详细教程

    Ubuntu配置Python环境的超详细教程

    这篇文章主要给大家介绍了关于Ubuntu配置Python环境的超详细教程,文中通过代码示例将配置的过程介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友可以参考下
    2023-08-08
  • python cv2截取不规则区域图片实例

    python cv2截取不规则区域图片实例

    今天小编就为大家分享一篇python cv2截取不规则区域图片实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python爬取亚马逊书籍信息代码分享

    python爬取亚马逊书籍信息代码分享

    这篇文章主要介绍了python爬取亚马逊书籍信息代码分享,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Pytorch实现tensor序列化和并行化的示例详解

    Pytorch实现tensor序列化和并行化的示例详解

    这篇文章主要介绍了Pytorch实现tensor序列化和并行化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,感兴趣的同学们下面随着小编来一起学习学习吧
    2023-12-12

最新评论