PyTorch的torch.cat用法

作者:my-GRIT 时间:2023-11-26 08:57:32 

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]

来源:https://blog.csdn.net/qq_39709535/article/details/80803003

标签:PyTorch,torch.cat
0
投稿

猜你喜欢

  • 总结Pyinstaller打包的高级用法

    2021-03-27 02:48:16
  • python局域网ip扫描示例分享

    2022-10-19 08:43:45
  • 用户体验量化方法研究(二)

    2010-02-08 12:46:00
  • jenkins配置golang 代码工程自动发布的实现方法

    2024-05-22 10:12:22
  • python实现感知器

    2021-03-18 09:12:13
  • urllib和BeautifulSoup爬取维基百科的词条简单实例

    2023-10-25 21:46:59
  • 浅谈python 导入模块和解决文件句柄找不到问题

    2023-12-07 03:40:07
  • Go 实现HTTP中间人代理的操作

    2024-04-23 09:40:15
  • Python中Pyspider爬虫框架的基本使用详解

    2021-04-01 06:00:31
  • SQLserver 2000中出现“指定的服务并未以已安装的服务存在 解决方案

    2011-04-27 14:33:00
  • 页面软键盘汉字输入

    2010-09-01 20:41:00
  • Python实现计算函数或程序执行时间

    2022-03-22 14:28:28
  • Javascript简单实现面向对象编程继承实例代码

    2024-04-19 09:50:42
  • 使用CSS简单实现垂直居中

    2008-06-23 07:32:00
  • Go语言中的变量和常量

    2024-05-09 14:52:44
  • 正则给header的冒号两边参数添加单引号(Python请求用)

    2022-10-07 13:59:59
  • python fabric实现远程操作和部署示例

    2021-07-18 14:22:14
  • 如何Shrink Undo表空间,释放过度占用的空间

    2010-07-16 13:17:00
  • 对numpy中向量式三目运算符详解

    2023-06-28 02:14:55
  • 为什么不压缩 HTML

    2010-05-07 12:37:00
  • asp之家 网络编程 m.aspxhome.com