1. 字面理解:

torch.cat是将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起。

2. 例子理解

> import torch
> A=torch.ones(2,3) #2x3的张量(矩阵)                   
> A
tensor([[ 1., 1., 1.],
    [ 1., 1., 1.]])
> B=2*torch.ones(4,3)#4x3的张量(矩阵)                  
> B
tensor([[ 2., 2., 2.],
    [ 2., 2., 2.],
    [ 2., 2., 2.],
    [ 2., 2., 2.]])
> C=torch.cat((A,B),0)#按维数0(行)拼接
> C
tensor([[ 1., 1., 1.],
     [ 1., 1., 1.],
     [ 2., 2., 2.],
     [ 2., 2., 2.],
     [ 2., 2., 2.],
     [ 2., 2., 2.]])
> C.size()
torch.Size([6, 3])
> D=2*torch.ones(2,4) #2x4的张量(矩阵)
> C=torch.cat((A,D),1)#按维数1(列)拼接
> C
tensor([[ 1., 1., 1., 2., 2., 2., 2.],
    [ 1., 1., 1., 2., 2., 2., 2.]])
> C.size()
torch.Size([2, 7])

上面给出了两个张量A和B,分别是2行3列,4行3列。即他们都是2维张量。因为只有两维,这样在用torch.cat拼接的时候就有两种拼接方式:按行拼接和按列拼接。即所谓的维数0和维数1.

C=torch.cat((A,B),0)就表示按维数0(行)拼接A和B,也就是竖着拼接,A上B下。此时需要注意:列数必须一致,即维数1数值要相同,这里都是3列,方能列对齐。拼接后的C的第0维是两个维数0数值和,即2+4=6.

C=torch.cat((A,B),1)就表示按维数1(列)拼接A和B,也就是横着拼接,A左B右。此时需要注意:行数必须一致,即维数0数值要相同,这里都是2行,方能行对齐。拼接后的C的第1维是两个维数1数值和,即3+4=7.

从2维例子可以看出,使用torch.cat((A,B),dim)时,除拼接维数dim数值可不同外其余维数数值需相同,方能对齐。

3.实例

在深度学习处理图像时,常用的有3通道的RGB彩色图像及单通道的灰度图。张量size为cxhxw,即通道数x图像高度x图像宽度。在用torch.cat拼接两张图像时一般要求图像大小一致而通道数可不一致,即h和w同,c可不同。当然实际有3种拼接方式,另两种好像不常见。比如经典网络结构:U-Net

PyTorch的torch.cat用法

里面用到4次torch.cat,其中copy and crop操作就是通过torch.cat来实现的。可以看到通过上采样(up-conv 2x2)将原始图像h和w变为原来2倍,再和左边直接copy过来的同样h,w的图像拼接。这样做,可以有效利用原始结构信息。

4.总结

使用torch.cat((A,B),dim)时,除拼接维数dim数值可不同外其余维数数值需相同,方能对齐。

补充知识:PyTorch的concat也就是torch.cat实例

我就废话不多说了,大家还是直接看代码吧~

import torch
a = torch.ones([1,2])
b = torch.ones([1,2])
torch.cat([a,b],1)
 1 1 1 1
[torch.FloatTensor of size 1x4]

以上这篇PyTorch的torch.cat用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

标签:
PyTorch,torch.cat

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com

评论“PyTorch的torch.cat用法”

暂无“PyTorch的torch.cat用法”评论...

RTX 5090要首发 性能要翻倍!三星展示GDDR7显存

三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。

首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。

据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。