【PyTorch】torch.cat==>张量拼接,在图像的应用上可以有效利用原始图像结构信息
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==>张量拼接,在图像的应用上可以有效利用原始图像结构信息相关推荐
- [PyTorch] 拼接多个tensor:torch.cat((A,B),axis)
注:参考博客Pytorch中的torch.cat()函数.本人在其基础上增加了更为详细的解释. torch.cat((A,B),axis)是对A, B两个tensor进行拼接. 参数axis指定拼接的 ...
- 【深度学习】特征融合的重要方法 | 张量的拼接 | torch.cat()函数 | torch.add(函数
文章目录 前言 一.torch.cat()函数 拼接只存在h,w(高,宽)的图像 二.torch.cat() 拼接存在c,h,w(通道,高,宽)的图像 三.torch.add()使张量对应元素直接相加 ...
- PyTorch的torch.cat
字面理解:torch.cat是将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起. 例子理解 import torch A=torch.ones(2,3) # ...
- 【pytorch】torch.cat()函数
欢迎移步我的个人博客 例子 import torchA=torch.ones(2,3) #2x3的张量(矩阵) Atensor([[ 1., 1., 1.],[ 1., 1., 1.]])B=2*to ...
- pytorch 中 torch.cat 函数的使用
1. 字面理解:torch.cat是将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起. 2. 例子理解 >>> import torch ...
- Pytorch中的torch.cat()函数
转载自:https://www.cnblogs.com/JeasonIsCoding/p/10162356.html 1. 字面理解:torch.cat是将两个张量(tensor)拼接在一起,cat是 ...
- pytorch拼接函数:torch.stack()和torch.cat()--详解及例子
原文链接: https://blog.csdn.net/xinjieyuan/article/details/105205326 https://blog.csdn.net/xinjieyuan/ar ...
- PyTorch基础(五)----- torch.cat()方法
cat是concatnate的缩写,concatnate的含义拼接,深度学习模型中最为常见的是通道拼接. 一.普通用法 dim = 1:表示将张量A.B按照维数1进行拼接,换句话说,就是按照列进行拼接 ...
- Pytorch教程(十九)torch.cat与torch.stack的区别
这一节,将分析拼接(concatenating)和叠加(stacking)张量的区别. 首先看三个例子,一个是pytorch,一个是TensorFlow,一个是numpy. stack和cat张量之间 ...
最新文章
- python的redis数据库连接与使用
- Eclipse创建web工程时,报错Dynamic Web Module 3.0 requires Java 1.6 or newer.
- 【超级攻略】仔细研究这些潜规则,你的APP用户量立刻翻番!
- android 快速新建字符资源
- 天猫首页迷思之-jquery实现左侧广告牌图片轮播
- 虚数填补了数学的那一个缺口?
- 类的构造函数和析构函数、默认构造函数
- 【计算机网络】Internet原理与技术2(因特网的路由协议RIP、OSPF、BGP,网络地址转换NAT,网络协议IPv6)
- 端午节,我们好好聊聊程序员这个群体
- vuejs对象更新渲染_vue 对对象的属性进行修改时,不能渲染页面 vue.$set()
- MDT2010学习(八),MDT结合WDS部署Win7 x86企业版
- Weblogic 视频教程免费下载
- TPU原理技术与xPU
- 英雄联盟LOL JAVA版
- SD-WAN,一场广域网的革命
- Unity3D资源包中没有Bouncy材质怎么办
- .js文件中的下划线
- excel表格内容拆分_3个动图,教你学会如何让excel表格自动拆分,学会它,小白变大神...
- 弱电布线施工规范与工艺(适用于强电与弱电改造)
- 朋友结婚了,新娘不是我