如何在PyTorch中使用散射()函数?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
散射()和scatter_()的作用是一样的,只不过散射()不会直接修改原来的张量,而scatter_()会
PyTorch中,一般函数加下划线代表直接在原来的张量上修改
散射(暗淡、索引src)的参数有3个
- <李>
暗:沿着哪个维度进行索引
李> <李>指数:用来分散的元素索引
李> <李>src:用来分散的源元素,可以是一个标量或一个张量
李>这个散射可以理解成放置元素或者修改元素
简单说就是通过一个张量src来修改另一个张量,哪个元素需要修改,用src中的哪个元素来修改由昏暗和指数决定
官方文档给出了三维张量的具体操作说明,如下所示
自我(指数[我][j] [k]] [j] [k],=, src[我][j] [k], #, if dim ==0 自[我][指数[我][j] [k]] [k],=, src[我][j] [k], #, if dim ==1 自[我][j][指数[我][j] [k]],=, src[我][j] [k], #, if dim ==,
例子:
x =, torch.rand (2), 5) #张量([[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) #张量([[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]])
具体地说,我们的指数是火炬。张量([[0 1 2 0 0],[2 0 0 1 2]]),一个二维张量、下面用图简单说明
我们是2维张量,一开始进行自我美元[指数[0][0]][0]美元,其中美元指数[0][0]美元的值是0,所以执行自我美元[0][0]=x [0] [0]=0.1940
自我美元指数[我][j]] [[j]=src美元[我][j] .
再比如美元自我(指数[1][0]][0]美元,其中美元指数[1][0]美元的值是2,所以执行自我美元[2][0]=x [1] [0]=0.2078 $
src除了可以是张量外,也可以是一个标量
例子:
torch.zeros (3, 5) .scatter_ (0,, torch.tensor ([[0,, 1,, 2,, 0, 0),, (2), 0, 0, 1,, 2]]),, 7) #张量([[7。,,7,,7。,,7。,,7。), #,,,,(0。,,7,,0。,,7。,,0), #,,,,(7。,,0。,,7。,,0。,,7。]]
散射()一般可以用来对标签进行> class_num =10 时间=batch_size 4 时间=label torch.LongTensor (batch_size, 1) .random_ (), % class_num #张量([[6], #,,,,[0], #,,,,[3], #,,,,[2]]) torch.zeros (batch_size, class_num) .scatter_(1),标签,,1) #张量([[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中使用散射()函数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!