1. 字面理解:torch.cat是将两个张量(tensor)拼接在一起,cat 是 concatenate 的意思,即拼接,联系在一起。

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

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种拼接方式(按照通道进行cat,按照H进行cat,按照W进行cat【其实这里如果是四维的,即带有batchsize的,那么还可以按照batchsize进行cat】),另两种好像不常见。比如经典网络结构:U-Net

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


1、问:实例中copy and crop左右两边特征图尺寸不同啊?例如最上面,左边是568*568,右边是392*392,博主麻烦解释下,是我理解错误吗?

答:是要在copy之后再进行crop,然后才能cat操作,它的操作是copy and crop,是有剪切的操作。需要剪切(crop)到和右边图一般大才可以cat。

2、问:u_net 中的torch.cat后组成的feature map 的变化是在通道数吗还是大小?

答:在通道数上进行cat,比如最上面一个copy-and-cropy操作,通道数由左边的64变成了128。

PyTorch的torch.cat_my-GRIT的博客-CSDN博客_torch.cat

【PyTorch】torch.cat==>张量拼接,在图像的应用上可以有效利用原始图像结构信息相关推荐

  1. [PyTorch] 拼接多个tensor:torch.cat((A,B),axis)

    注:参考博客Pytorch中的torch.cat()函数.本人在其基础上增加了更为详细的解释. torch.cat((A,B),axis)是对A, B两个tensor进行拼接. 参数axis指定拼接的 ...

  2. 【深度学习】特征融合的重要方法 | 张量的拼接 | torch.cat()函数 | torch.add(函数

    文章目录 前言 一.torch.cat()函数 拼接只存在h,w(高,宽)的图像 二.torch.cat() 拼接存在c,h,w(通道,高,宽)的图像 三.torch.add()使张量对应元素直接相加 ...

  3. PyTorch的torch.cat

    字面理解:torch.cat是将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起. 例子理解 import torch A=torch.ones(2,3) # ...

  4. 【pytorch】torch.cat()函数

    欢迎移步我的个人博客 例子 import torchA=torch.ones(2,3) #2x3的张量(矩阵) Atensor([[ 1., 1., 1.],[ 1., 1., 1.]])B=2*to ...

  5. pytorch 中 torch.cat 函数的使用

    1. 字面理解:torch.cat是将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起. 2. 例子理解 >>> import torch ...

  6. Pytorch中的torch.cat()函数

    转载自:https://www.cnblogs.com/JeasonIsCoding/p/10162356.html 1. 字面理解:torch.cat是将两个张量(tensor)拼接在一起,cat是 ...

  7. pytorch拼接函数:torch.stack()和torch.cat()--详解及例子

    原文链接: https://blog.csdn.net/xinjieyuan/article/details/105205326 https://blog.csdn.net/xinjieyuan/ar ...

  8. PyTorch基础(五)----- torch.cat()方法

    cat是concatnate的缩写,concatnate的含义拼接,深度学习模型中最为常见的是通道拼接. 一.普通用法 dim = 1:表示将张量A.B按照维数1进行拼接,换句话说,就是按照列进行拼接 ...

  9. Pytorch教程(十九)torch.cat与torch.stack的区别

    这一节,将分析拼接(concatenating)和叠加(stacking)张量的区别. 首先看三个例子,一个是pytorch,一个是TensorFlow,一个是numpy. stack和cat张量之间 ...

最新文章

  1. python的redis数据库连接与使用
  2. Eclipse创建web工程时,报错Dynamic Web Module 3.0 requires Java 1.6 or newer.
  3. 【超级攻略】仔细研究这些潜规则,你的APP用户量立刻翻番!
  4. android 快速新建字符资源
  5. 天猫首页迷思之-jquery实现左侧广告牌图片轮播
  6. 虚数填补了数学的那一个缺口?
  7. 类的构造函数和析构函数、默认构造函数
  8. 【计算机网络】Internet原理与技术2(因特网的路由协议RIP、OSPF、BGP,网络地址转换NAT,网络协议IPv6)
  9. 端午节,我们好好聊聊程序员这个群体
  10. vuejs对象更新渲染_vue 对对象的属性进行修改时,不能渲染页面 vue.$set()
  11. MDT2010学习(八),MDT结合WDS部署Win7 x86企业版
  12. Weblogic 视频教程免费下载
  13. TPU原理技术与xPU
  14. 英雄联盟LOL JAVA版
  15. SD-WAN,一场广域网的革命
  16. Unity3D资源包中没有Bouncy材质怎么办
  17. .js文件中的下划线
  18. excel表格内容拆分_3个动图,教你学会如何让excel表格自动拆分,学会它,小白变大神...
  19. 弱电布线施工规范与工艺(适用于强电与弱电改造)
  20. 朋友结婚了,新娘不是我

热门文章

  1. 关于struts线程问题 转
  2. JavaScript验证正则表达式大全
  3. 记录一次maven依赖成功导入,但找不到相关包的IDEA臭bug
  4. 用Python的smtp模块发邮件的示例
  5. Linux环境Kafka安装配置
  6. Jenkins自动化部署容器
  7. Ibatis中的大于、小于、like等符号写法
  8. Swift字符串转换成类
  9. centos6.7x86_64php7安装笔记 new
  10. 开发一个Swing功能时的一点总结