百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

pytorch中的 scatter_()函数使用和详解

ztj100 2024-12-18 18:19 197 浏览 0 评论

scatter(dim, index, src)的三个参数为:

(1)dim:沿着哪个维度进行索引

(2)index: 用来scatter的元素索引

(3)src: 用来scatter的源元素,可以使一个标量也可以是一个张量

官方给的例子为三维情况下的例子:

y = y.scatter(dim,index,src)
 
#则结果为:
y[ index[i][j][k]  ] [j][k] = src[i][j][k] # if dim == 0
y[i] [ index[i][j][k] ] [k] = src[i][j][k] # if dim == 1
y[i][j] [ index[i][j][k] ]  = src[i][j][k] # if dim == 2

如果是二维的例子,则应该对应下面的情况:

y = y.scatter(dim,index,src)
 
#则:
y [ index[i][j] ] [j] = src[i][j] #if dim==0
y[i] [ index[i][j] ]  = src[i][j] #if dim==1 

我们举一个实际的例子:

import torch
 
x = torch.randn(2,4)
print(x)
y = torch.zeros(3,4)
y = y.scatter_(0,torch.LongTensor([[2,1,2,2],[0,2,1,1]]),x)
print(y)

#结果为:

tensor([[-0.9669, -0.4518,  1.7987,  0.1546],
        [-0.1122, -0.7998,  0.6075,  1.0192]])
tensor([[-0.1122,  0.0000,  0.0000,  0.0000],
        [ 0.0000, -0.4518,  0.6075,  1.0192],
        [-0.9669, -0.7998,  1.7987,  0.1546]])
'''
scatter后:
y[ index[0][0] ] [0] = src[0][0] -> y[2][0]=-0.9669
y[ index[1][3] ] [3] = src[1][3] -> y[1][3]=1.10192
'''

#如果src为标量,则代表着将对应位置的数值改为src这个标量

那么这个函数有什么作用呢?其实可以利用这个功能将pytorch 中mini batch中的返回的label(特指[ 1,0,4,9 ],即size为[4]这样的label)转为one-hot类型的label,举例子如下:

import torch
 
mini_batch = 4
out_planes = 6
out_put = torch.rand(mini_batch, out_planes)
softmax = torch.nn.Softmax(dim=1)
out_put = softmax(out_put)
 
print(out_put)
label = torch.tensor([1,3,3,5])
one_hot_label = torch.zeros(mini_batch, out_planes).scatter_(1,label.unsqueeze(1),1)
print(one_hot_label)

上述的这个例子假设是一个分类问题,我设置out_planes=6,是假设总共有6类,mini_batch是我们送入的网络的每个mini_batch的样本数量,这里我们不设置网络,直接假设网络的输出为一个随机的张量 ,通常我们要对这个输出进行softmax归一化,此时就代表着其属于每个类别的概率了。说到这里都不是重点,就是为了方便理解如何使用scatter,将size为[mini_batch]的张量,转为size为[mini_batch, out_palnes]的张量,并且这个生成的张量的每个行向量都是one-hot类型的了。通过看下面的输出结果就完全能够理解了,不理解,给我留言,我给你解释清楚。

tensor([[0.1202, 0.2120, 0.1252, 0.1127, 0.2314, 0.1985],
        [0.1707, 0.1227, 0.2282, 0.0918, 0.1845, 0.2021],
        [0.1629, 0.1936, 0.1277, 0.1204, 0.1845, 0.2109],
        [0.1226, 0.1524, 0.2315, 0.2027, 0.1907, 0.1001]])
tensor([1, 3, 3, 5])
tensor([[0., 1., 0., 0., 0., 0.],
        [0., 0., 0., 1., 0., 0.],
        [0., 0., 0., 1., 0., 0.],
        [0., 0., 0., 0., 0., 1.]])

相关推荐

xls文件保存宏_excel如何保存宏为其他文件使用

一、直接保存为旧版.xls格式(兼容性优先)1.操作方法-在Excel中打开文件→点击「文件」→「另存为」→保存类型选择“Excel97-2003工作簿(*.xls)”。-系统...

C 插入或删除word分页符_怎么删除插了分页符的空白页

分页符是word中常用的一种分页的符号,它标志着上一页的结束和下一页的开始。在word中分页符有两种,一种是自动分页符,也叫软分页符,即一页数据写满以后转到下一页时word自动插入的一个分页符;另一种...

177.C# SqlSugar 删除数据_sql删除数据代码

摘要普通删除、单表删除、表达式删除,子查询删除正文根据主键Where条件删除varret=Db.Deleteable<wms_user>().Where(newwms_user...

C#使用handle实现获取占用指定文件或文件夹的进程(Locksmith功能)

前言:很多时候,一些不知道啥进程,把你的文件给占用了,然后就没办法删掉或者做其他操作。如果使用Locksmith功能,就可以实现快速锁定是哪个进程在搞事情,把对应进程干掉就可以了。下面内容演示C#使用...

小材大用!用好Windows 10文件缩略图

当我们将图片传输到电脑中后,默认情况下Windows会显示小图预览,因此我们可以不打开图片就能看到图的基本模样。为了防止系统负担过重,Windows只在打开特定的文件夹时生成缩略图,且在系统关机时缩略...

C#:删除 Word 中的页眉或页脚_c# 删除文件

C#:删除Word中的页眉或页脚在处理Word文档批量操作时,我们经常需要清除页眉页脚——比如合并文档后去除冗余信息,或为标准化报告格式。手动操作不仅繁琐,更难以集成到自动化流程中。使用Spire...

C# INI文件读写方法_c#ini文件如何一次读取所有数据

在C#项目的开发实践里,存在着一种十分常见且实用的操作习惯,那就是把一部分常用的参数值写入到.ini文件当中。这种做法背后有着充分的考量。从软件系统的设计角度来看,将常用参数集中存放在.ini文件...

C# 基础知识系列- 14 IO篇 文件的操作(1)

0.前言本章节是IO篇的第二集,我们在上一篇中介绍了C#中IO的基本概念和一些基本方法,接下来我们介绍一下操作文件的方法。在编程的世界中,操作文件是一个很重要的技能。...

C# 删除 Excel 工作表中的空白行和空白列

在日常处理Excel数据时,经常会遇到表格中夹杂着许多空白行或空白列。这些空白内容不仅影响数据的整洁性,还可能导致数据处理和分析结果出错。手动逐一删除这些空白行列不仅效率低下,而且容易遗漏。本文将...

微信小程序原生开发【辅助框架】 LWX

项目介绍作者开发了一年多的小程序,在开发过程中遇到了很多的坑与不方便之处,同时又对原生开发有着一定的执著,但是对于习惯了我这种用惯了vue的人来说,原生小程序中的一些写法确实让人感到难受,我想大家在进...

谷歌正式发布Android 12,UI更好看,打造属于自己的定制化属性

焕然一新的Android12今年5月的GoogleI/O大会上,谷歌推出了Android12系统,这是原生安卓系统史上最大的设计变化,从此旧貌换新颜。...

【推荐】一个基于 SpringBoot 框架开发的 OA 办公自动化系统

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍...

「干货」9个最热门React PC端组件库|UI框架

最近一直在使用React.js开发项目,在开发过程中也用到了一些开源UI组件库。上次有给大家分享React移动端组件库,今天,就给大家推荐9个常用ReactPC端组件库。...

Android主流UI开源库整理_android ui 布局开源框架

前言最近老大让我整理一份Android主流UI开源库的资料,以补充公司的Android知识库。由于对格式不做特别限制,于是打算用博客的形式记录下来,方便查看、防丢并且可以持续维护、不断更新。标题隐...

Datetimepicker.js用法_datepicker的用法

$('.form_date').datetimepicker({//初始化language:'zh-CN',//weekStart:1,...

取消回复欢迎 发表评论: