PyTorch的torch.cat

本文详细介绍了PyTorch中torch.cat函数的用法,通过字面和实例解释了如何按行和列拼接张量。强调了在拼接时,除指定维度外,其他维度必须匹配。并提及在深度学习处理图像时的应用,特别是在U-Net等网络结构中的作用。
摘要由CSDN通过智能技术生成
  1. 字面理解:torch.cat是将两个张量(tensor)拼接在一起,cat是concatenate的意思,即拼接,联系在一起。

  2. 例子理解


>>> import torch
>>> A=torch.ones(2,3) #2x3的张量(矩阵)                                     
>>> print('tensor-A',A)
tensor-A tensor([[ 1.,  1.,  1.],
        [ 1.,  1.,  1.]])
        
>>> B=2*torch.ones(4,3)#4x3的张量(矩阵)                                    
>>> print('tensor-B', B)

tensor-B tensor([[ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.]])
        
>>> C=torch.cat((A,B),0)#按维数0(行)拼接
>>> print('tensor-C',C)

tensor-C tensor([[ 1.,  1.,  1.],
         [ 1.,  1.,  1.],
         [ 2.,  2.,  2.],
         [ 2.,  2.,  2.],
         [ 2.,  2.,  2.],
         [ 2.,  2.,  2.]])
>>> print(C.size())
torch.Size([6, 3])
>>> D=3*torch.ones(2,4) #2x4的张量(矩阵)
>>> E=torch.cat((A,D),1)#按维数1(列)拼接
>>> print('tensor-E',E)
tensor-E tensor([[ 1.,  1.,  1.,  3.,  3.,  3.,  3.],
                 [ 1.,  1.,  1.,  3.,  3.,  3.,  3.]])
>>> print(E.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.

E=torch.cat((A,D),1)就表示按维数1(列)拼接A和D,也就是横着拼接,A左D右。此时需要注意:行数必须一致,即维数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

在这里插入图片描述

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

4.总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值