合并tensors

  • torch.cat 沿着特定维数连接一系列张量。
  • torch.stack 沿新维度连接一系列张量。

torch.cat

在给定维度中连接给定的 seq 个张量序列。
所有张量必须具有相同的形状(连接维度除外)或为空。

torch.cat(tensors, dim=0, *, out=None) → Tensor

参数

  • tensors(张量序列):任何相同类型的张量序列。 提供的非空张量必须具有相同的形状。在给定维度上对输入的张量序列进行连接操作。
  • dim (int) : 张量连接的维度,

torch.stack

沿新维度连接一系列张量。(维度叠加)
所有张量都需要具有相同的大小。

torch.stack(tensors, dim=0, *, out=None) → Tensor

参数

  • tensors(张量序列):要连接的张量序列
  • dim (int) : 要插入的维度。必须介于 0 和串联张量的维数之间(含)

示例

沿第0维操作:

import torchx1 = torch.tensor([[1,2,3], [4,5,6]])# x1.shape = tensor.size([2,3])
x2 = torch.tensor([[7,8,9], [10,11,12]])# x2.shape = tensor.size([2,3])
print(x1.shape)
print('沿第0维进行操作:')
y1 = torch.cat([x1, x2], dim=0)
y2 = torch.stack([x1, x2], dim=0)
print('cat, y1:', y1.shape,'\n',y1)
print('stack, y2:', y2.shape,'\n',y2)

输出:

沿第0维进行操作:
cat, y1: torch.Size([4, 3]) tensor([[ 1,  2,  3],[ 4,  5,  6],[ 7,  8,  9],[10, 11, 12]])
stack, y2: torch.Size([2, 2, 3]) tensor([[[ 1,  2,  3],[ 4,  5,  6]],[[ 7,  8,  9],[10, 11, 12]]])

从y1的输出可以看到,cat在第0维将x1和x2元素进行续接,即输出为[x1[0], x1[1], x2[0], x2[1]], shape由[2, 3]变为[4,3]。

从y2的输出可以看到,stack直接将x1和x2的第0维进行叠加,即输出为[x1, x2],shape由[2,3]变为[2, 2, 3]。

沿第1维操作:

print('沿第1维进行操作:')
y1 = torch.cat(x, dim=1)
y2 = torch.stack(x, dim=1)
print('cat, y1:', y1.shape,'\n',y1)
print('stack, y2:', y2.shape,'\n',y2)

输出:

沿第1维进行操作:
cat, y1: torch.Size([2, 6]) tensor([[ 1,  2,  3,  7,  8,  9],[ 4,  5,  6, 10, 11, 12]])
stack, y2: torch.Size([2, 2, 3]) tensor([[[ 1,  2,  3],[ 7,  8,  9]],[[ 4,  5,  6],[10, 11, 12]]])

从y1的输出可以看到,cat将x1和x2相对应的第1维的元素进行续接, shape由[2,3]变为[2, 6]。

从y2的输出可以看到,stack直接将x1和x2相对应的第1维的元素进行叠加,即输出为[[x1[0], x2[0]], [x1[1], x2[1]],shape由[2,3]变为[2, 2, 3]。

沿第2维操作:

输出

y1 = torch.cat(x, dim=2)
print('cat, y1:', y1.shape,'\n',y1)Traceback (most recent call last):File "/Users/gyuer/Desktop/test.py", line 8, in <module>y1 = torch.cat(x, dim=2)
IndexError: Dimension out of range (expected to be in range of [-2, 1], but got 2)
y2 = torch.stack(x, dim=2)
print('stack, y2:', y2.shape,'\n',y2)stack, y2: torch.Size([2, 3, 2]) tensor([[[ 1,  7],[ 2,  8],[ 3,  9]],[[ 4, 10],[ 5, 11],[ 6, 12]]])

从以上结果可以看出,torch.stack(x, dim=2)是将x1[i][j]和x2[i][j]堆叠在一起的。如x1[0][0]=1和x2[0][0]=7堆叠在一起,得到[1, 7]。
stack的参数dim要插入的维度必须介于 0 和串联张量的维数之间

以上总结借鉴了官网的英文解释和https://blog.csdn.net/weixin_42920104/article/details/105833691

pytorch学习——torch.cat和torch.stack的区别相关推荐

  1. torch.cat 和 torch.stack

    torch.cat 和 torch.stack看起来相似但是性质还是不同的 使用python中的list列表收录tensor时,然后将list列表转化成tensor时,会报错.这个时候就要使用torc ...

  2. 2021.08.22学习内容torch.cat()和torch.stack()函数

    torch.cat()函数 将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起. def cat(tensors: List[torch.Tensor], d ...

  3. torch.cat() 和 torch.stack()

    网上很多的示例,都在讨论二维数据(矩阵),单是对于做图像与深度学习的人来说均是三维起步,一般都是4维,下边以4维数据举例 对于pytorch中的堆叠与拼接函数stack与cat,二者还是有一定的不同 ...

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

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

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

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

  6. pytorch学习(五)---torch.nn模块

            本篇自学笔记来自于b站<PyTorch深度学习快速入门教程(绝对通俗易懂!)[小土堆]>,Up主讲的非常通俗易懂,文章下方有视频连接,如有需要可移步up主讲解视频,如有侵权 ...

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

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

  8. 速成pytorch学习——8天损失函数

    一般来说,监督学习的目标函数由损失函数和正则化项组成.(Objective = Loss + Regularization) Pytorch中的损失函数一般在训练模型时候指定. 注意Pytorch中内 ...

  9. 速成pytorch学习——4天中阶API示范

    使用Pytorch的中阶API实现线性回归模型和和DNN二分类模型. Pytorch的中阶API主要包括各种模型层,损失函数,优化器,数据管道等等. 一,线性回归模型 1,准备数据 import nu ...

最新文章

  1. linux内存分配 连续 足够,linux内存池能分配连续物理内存吗
  2. 常用几种激活函数的总结
  3. 缓存HA的开源解决方案
  4. cocos2d-x自制工具03:AnimatePacker for Mac/Win32 v1.1 Build1发布!
  5. 虚拟多Mac地址工具Multimac
  6. nginx修改监听端口号8080_Nginx + Tomcat 配置
  7. 9.为包含指针的关联容器指定比较类型
  8. 数据拆分缺点和解决方案
  9. WebAPI(part7)--Tab栏切换案例
  10. Linux/Centos Tomcat 配置日志切分以及脚本自动清理
  11. TaskBar Hider – 用快捷键手动隐藏任务栏[Windows]
  12. html怎么让图片自动动起来,css如何让图片动起来?
  13. NBIA Data Retriever(NBIA数据下载工具)使用
  14. 怎样才能知道自己的手机是否支持北斗导航?
  15. Unix环境高级编程(十九)终端I/O
  16. Windows自动关机命令
  17. 物联网(IOT)介绍与发展背景
  18. 日常生活开支记账明细_你的理财小管家!简单明了!皮面理财记账本明细流水支出笔记本!...
  19. STC - 非标连接的7段数码管赋值
  20. html怎么引用桌面图片,html怎么引入图片?

热门文章

  1. IDEA设置单个文件、单个包、单个项目的编码格式
  2. 设置select下拉框不可修改的→“四”←种方法
  3. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
  4. 电脑蓝屏问题检查、解决、
  5. php.ini Xdebug配置
  6. 工具推荐:Astah Community 绘制图形
  7. Android TextView设置透明度方法的注意点
  8. 转 spring配置文件
  9. 本地运行github上的vue2.0仿饿了么webapp项目
  10. LeetCode-198. 打家劫舍