torch.stack 张量维度的变化

torch.stack 是 PyTorch 中用于将一系列张量沿一个新的维度堆叠的函数。与 torch.cat 不同的是,torch.stack会在指定的维度上增加一个新的维度,而不是将张量直接拼接。

基本用法

语法:

复制代码
torch.stack(tensors, dim=0)
  • tensors: 一个张量列表,包含多个形状相同的张量(shape 必须相同)。
  • dim: 新增维度的位置,默认是 0。

举例说明

假设有三个形状为 (2, 3) 的张量:

复制代码
import torch

a = torch.tensor([[1, 2, 3], [4, 5, 6]])
b = torch.tensor([[7, 8, 9], [10, 11, 12]])
c = torch.tensor([[13, 14, 15], [16, 17, 18]])

沿 dim=0 堆叠

复制代码
stacked = torch.stack([a, b, c], dim=0)
print(stacked.shape)  # torch.Size([3, 2, 3])
  • 在维度 0 上增加一个新的维度,原始的 (2, 3) 形状变成 (3, 2, 3)。
  • stacked 的第 0 维度有 3 个元素,对应原来的 a, b, c 张量。

沿 dim=1 堆叠

复制代码
stacked = torch.stack([a, b, c], dim=1)
print(stacked.shape)  # torch.Size([2, 3, 3])
  • 新的维度插入到原第 1 维的位置。
  • stacked 的第 1 维度有 3 个元素,对应原来的 a, b, c 张量。

沿 dim=2 堆叠

复制代码
stacked = torch.stack([a, b, c], dim=2)
print(stacked.shape)  # torch.Size([2, 3, 3])
  • 新的维度插入到原第 2 维的位置,形状变为 (2, 3, 3)。

torch.stack 的形状变化总结

假设堆叠前的每个张量形状是 (A, B, C),在 dim=0、dim=1 和 dim=2 堆叠后的形状分别为:

  • dim=0: (N, A, B, C)
  • dim=1: (A, N, B, C)
  • dim=2: (A, B, N, C)

其中 N 是堆叠的张量数量。

和torch.cat函数的区别:

cat:在指定维度拼接多个张量。不增加维度。

复制代码
c1 = torch.tensor([[1, 2], [3, 4]])
c2 = torch.tensor([[5, 6], [7, 8]])
c_cat = torch.cat([c1, c2], dim=0)  # shape (4, 2)
相关推荐
探客木木夕1 分钟前
结构超图重构神经网络模型:脉冲权重节点与四阶段闭环框架
人工智能·深度学习·神经网络
地理探险家11 分钟前
从零实现图片自动分类:数据准备、模型训练与单图预测
人工智能·深度学习·机器学习·分类·数据挖掘·数据集
亲笔签16 分钟前
“场景重庆”典型案例 | 数字笔迹技术赋能政务服务 打造可信电子签署创新场景
大数据·人工智能
马剑威(威哥爱编程)16 分钟前
【共创稿事节】HarmonyOS 7 Agent 开发实战 04:云端 RAG 搭企业私有知识库问答
人工智能·华为·harmonyos
snhna18 分钟前
DeerFlow 2.x 源码拆解:多智能体委派、Skills、沙箱与 Linux 部署实战
人工智能·python
m4Rk_22 分钟前
【论文阅读】Agent 记忆机制(99):PrisMem——从整体分数搜索走向能力驱动的记忆自进化
论文阅读·人工智能·学习·开源·github
喵叔哟29 分钟前
第 4 章 用 Constitution 给 AI 编程立法
人工智能
2401_8652616330 分钟前
亦唐科技国产贴片机的质量控制与生产优化之路
人工智能
深圳市恒星物联科技有限公司34 分钟前
排水管网监测边缘计算网关:本地数据预处理实现解析
人工智能·边缘计算
杀生丸学AI34 分钟前
【世界模型】WorldCrafter:基于隐式三维感知记忆的视频世界模型
人工智能·三维重建·扩散模型·视频生成·世界模型·4dgs·动态重建