torch.cat() 和 torch.stack()
网上很多的示例,都在讨论二维数据(矩阵),单是对于做图像与深度学习的人来说均是三维起步,一般都是4维,下边以4维数据举例
对于pytorch中的堆叠与拼接函数stack与cat,二者还是有一定的不同
torch.cat这是一个拼接函数(姑且这么说)
直接上例子
a0=torch.Tensor([[[[1,1,1,1],[2,2,2,2]]]])
a1=torch.Tensor([[[[3,3,3,3],[4,4,4,4]]]])
torch.Size([1, 1, 2, 4])torch.cat((a0,a1),dim=0).type(torch.FloatTensor)tensor([[[[1., 1., 1., 1.],[2., 2., 2., 2.]]],[[[3., 3., 3., 3.],[4., 4., 4., 4.]]]])
torch.Size([2, 1, 2, 4])
上边dim=0,为以第一维为基准拼接,对于一个张量的维度,有几个放括号就是几维,上边例子a0与a1均为4维张量,因此以第0维拼接就是将第一个中括号内的内容进行拼接。最终的尺度大小为(2,1,2,4)
a0=torch.Tensor([[[[1,1,1,1],[2,2,2,2]]]])
a1=torch.Tensor([[[[3,3,3,3],[4,4,4,4]]]])
torch.cat((a0,a1),dim=1).type(torch.FloatTensor)tensor([[[[1., 1., 1., 1.],[2., 2., 2., 2.]],[[3., 3., 3., 3.],[4., 4., 4., 4.]]]])
torch.Size([1, 2, 2, 4])
以第1维进行拼接,将第二个括号内的内容进行拼接
a0=torch.Tensor([[[[1,1,1,1],[2,2,2,2]]]])
a1=torch.Tensor([[[[3,3,3,3],[4,4,4,4]]]])
torch.cat((a0,a1),dim=2).type(torch.FloatTensor)
tensor([[[[1., 1., 1., 1.],[2., 2., 2., 2.],[3., 3., 3., 3.],[4., 4., 4., 4.]]]])
torch.Size([1, 1, 4, 4])
a0=torch.Tensor([[[[1,1,1,1],[2,2,2,2]]]])
a1=torch.Tensor([[[[3,3,3,3],[4,4,4,4]]]])
torch.cat((a0,a1),dim=3).type(torch.FloatTensor)
tensor([[[[1., 1., 1., 1., 3., 3., 3., 3.],[2., 2., 2., 2., 4., 4., 4., 4.]]]])
torch.Size([1, 1, 2, 8])
以上为torch.cat的使用方法,两个tensor的维度必须一致,最终生成的张量的维度也没有变化,但是torch.cat就不一样了
torch.stack
依然使用上边的例子,看看这个函数的功能
a0=torch.Tensor([[[[1,1,1,1],[2,2,2,2]]]])
a1=torch.Tensor([[[[3,3,3,3],[4,4,4,4]]]])
torch.stack((a0,a1),dim=0).type(torch.FloatTensor)tensor([[[[[1., 1., 1., 1.],[2., 2., 2., 2.]]]],[[[[3., 3., 3., 3.],[4., 4., 4., 4.]]]]])
torch.Size([2, 1, 1, 2, 4])
a0=torch.Tensor([[[[1,1,1,1],[2,2,2,2]]]])
a1=torch.Tensor([[[[3,3,3,3],[4,4,4,4]]]])
torch.stack((a0,a1),dim=1).type(torch.FloatTensor)
tensor([[[[[1., 1., 1., 1.],[2., 2., 2., 2.]]],[[[3., 3., 3., 3.],[4., 4., 4., 4.]]]]])
torch.Size([1, 2, 1, 2, 4])
从上边两个例子,可以看出,对于torch.stack来说,会先将原始数据维度扩展一维,然后再按照维度进行拼接,具体拼接操作同torch.cat类似
贴个torch.stack()官方文档的截图
dim代表沿着哪个维度进行堆叠
举个例子:
dim=0时:(dim不写时,默认为0)
a: 2x3 ; b: 2x3 ; c: 2x2x3
dim=1时:略
dim=2时:
a: 2x3 ; b: 2x3 ; c: 2x3x2
总结
参考链接
https://zhuanlan.zhihu.com/p/70035580
https://www.pianshen.com/article/10611294719/
torch.cat() 和 torch.stack()相关推荐
- torch.cat 和 torch.stack
torch.cat 和 torch.stack看起来相似但是性质还是不同的 使用python中的list列表收录tensor时,然后将list列表转化成tensor时,会报错.这个时候就要使用torc ...
- pytorch学习——torch.cat和torch.stack的区别
合并tensors torch.cat 沿着特定维数连接一系列张量. torch.stack 沿新维度连接一系列张量. torch.cat 在给定维度中连接给定的 seq 个张量序列. 所有张量必须具 ...
- 2021.08.22学习内容torch.cat()和torch.stack()函数
torch.cat()函数 将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起. def cat(tensors: List[torch.Tensor], d ...
- 【深度学习】特征融合的重要方法 | 张量的拼接 | torch.cat()函数 | torch.add(函数
文章目录 前言 一.torch.cat()函数 拼接只存在h,w(高,宽)的图像 二.torch.cat() 拼接存在c,h,w(通道,高,宽)的图像 三.torch.add()使张量对应元素直接相加 ...
- Pytorch教程(十九)torch.cat与torch.stack的区别
这一节,将分析拼接(concatenating)和叠加(stacking)张量的区别. 首先看三个例子,一个是pytorch,一个是TensorFlow,一个是numpy. stack和cat张量之间 ...
- pytorch拼接函数:torch.stack()和torch.cat()--详解及例子
原文链接: https://blog.csdn.net/xinjieyuan/article/details/105205326 https://blog.csdn.net/xinjieyuan/ar ...
- torch.stack(), torch.cat()用法详解
torch.stack(), torch.cat()用法详解 if __name__ == '__main__':import torchx_dat = torch.tensor([[1, 2], [ ...
- 多维tensor/numpy array的拼接(np.stack, torch.cat)
对于numpy array 当有如下情景,我需要4维tensor,(b,c,w,h), 而写的程序是单张图片遍历的,即每张图片(c,w,h),这时,就需要先用一个list,然后每次append,到最后 ...
- torch.cat torch.stack
文章目录 1. torch.cat 在原来的维度上堆叠 2. torch.stack 在新的维度上堆叠 3. 小结: 1. torch.cat 在原来的维度上堆叠 cat是concatnate的意思: ...
最新文章
- [置顶] 单键模式的C++描述
- C++11中Lambda表达式的使用
- 电脑cmd命令大全_电脑定时关机的方法(2)
- mysql表空间权限_MySQL InnoDB表空间加密示例详解
- 1031. 查验身份证(15)
- 鸣人的影分身(信息学奥赛一本通-T1303)
- 吃了核辐射食物怎么办_我们经常吃的猪肉,相当一部分是核辐射照过的,会对身体有害吗...
- 第六章:如何在SpringBoot项目中使用拦截器
- 邬贺铨/余晓晖/田溯宁…千家从业者,数十位行业大咖共同烹制了一场怎样的AIoT“盛宴”?
- java 7个数排序_7 Java 快速排序
- Linux中下载,压缩,解压等命令
- kiss原则包括什么_KISS原则
- 三维随机介质模型matlab,基于随机介质理论的复合材料孔隙二维形貌几何仿真
- 四川省中小学计算机台球标准,《四川省中小学教育技术装备标准》.xls
- 一款商城APP开发需要多少钱?
- 奥鹏20春季1903C语言,奥鹏20春学期《并行程序设计》在线作业
- VS1005 HiRes 高清录音开发模块 BOB MK2
- matlab判断星期几的语句,计算某一天是星期几的matlab程序
- Qt中鼠标的双击事件和单击事件的实现方式
- Unity灯光(light)