• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-08) 31次浏览 已收录 0个评论

这篇文章主要介绍了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-来源gaodai#ma#com搞@代~码网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.]])

以上就是PyTorch笔记之scatter()函数的使用的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PyTorch笔记之scatter()函数的使用

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址