李沐《动手学深度学习》torch.cat() 和 torch.stack()的区别及思考

一、问题引出

好久没更新啦!最近在学习沐神《动手学深度学习》6.5节池化层的时候,发现沐神在两处相似的地方使用了两种Python拼接函数torch.cat()和torch.stack():


百思不得其解,于是查阅相关文档之后终于弄清楚了两者之间的区别,遂做总结如下。

二、问题解决

1.torch.cat()

torch.cat()函数可以将多个张量拼接成一个张量。torch.cat()有两个参数,第一个是要拼接的张量的列表或是元组;第二个参数是拼接的维度

python 复制代码
# 假设是时间步T1的输出
T1 = torch.tensor([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])
# 假设是时间步T2的输出
T2 = torch.tensor([[10, 20, 30],
          [40, 50, 60],
          [70, 80, 90]])
print("T1.shape: ", T1.shape, "T2.shape: ", T2.shape)
print(torch.cat((T1,T2),dim=0).shape)
print(torch.cat((T1,T2),dim=1).shape)

输出为:

2.torch.stack()

torch.stack()函数同样有张量列表和维度两个参数。stack与cat的区别在于,torch.stack()函数要求输入张量的大小完全相同,得到的张量的维度会比输入的张量的大小多1,并且多出的那个维度就是拼接的维度,那个维度的大小就是输入张量的个数。

python 复制代码
print("T1.shape: ", T1.shape, "T2.shape: ", T2.shape)
print(torch.stack((T1,T2),dim=0).shape)
print(torch.stack((T1,T2),dim=1).shape)
print(torch.stack((T1,T2),dim=2).shape)

输出为:

三、总结

总的来说,cat 和 stack的区别在于 cat会增加现有维度的值,可以理解为续接,stack会新加增加一个维度,可以理解为叠加。

使用stack可以保留两个信息:[1. 序列] 和 [2. 张量矩阵] 信息,属于【扩张再拼接】的函数。形象的理解:假如数据都是二维矩阵(平面),它可以把这些一个个平面(矩阵)按第三维(例如:时间序列)压成一个三维的立方体,而立方体的长度就是时间序列长度。该函数常出现在自然语言处理(NLP)和图像卷积神经网络(CV)中。

欢迎大家一起跟着学习沐神的《动手学深度学习》,我建了一个github网站,发布了我的日常学习笔记,欢迎大家star!,网址为https://github.com/BugMaker2002/DeepLearningAction-LiMu

相关推荐
即兴小索奇11 分钟前
AI智能物流仓储新变革:从自动分拣到动态路径规划,破解仓储运营效率难题
人工智能·ai·商业·ai商业洞察·即兴小索奇
中草药z19 分钟前
【SpringAI】快速上手,详解项目快速集成主流大模型DeepSeek,ChatGPT
人工智能·flux·sse·springai·deepseek·硅基流动·流式编程
qq_124987075325 分钟前
基于改进蜂群优化算法的高频金融波动率预测系统 (源码+论文+部署+安装)
python·算法·金融·毕业设计·蜂群优化算法
AllyLi022430 分钟前
CondaError: Run ‘conda init‘ before ‘conda activate‘
linux·开发语言·笔记·python
测试老哥32 分钟前
如何用Postman做接口测试?
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
BioRunYiXue41 分钟前
FRET、PLA、Co-IP和GST pull-down有何区别? 应该如何选择?
java·服务器·网络·人工智能·网络协议·tcp/ip·eclipse
zhangbaolin1 小时前
open webui源码分析11-四个特征之记忆
python·大模型·memory·open webui
界面开发小八哥1 小时前
界面控件Telerik UI for Blazor 2025 Q2新版亮点 - AI集成全面增强
人工智能·ui·blazor·用户界面·telerik
皮皮学姐分享-ppx1 小时前
机器人行业工商注册企业基本信息数据(1958-2023年)
大数据·人工智能·python·物联网·机器人·区块链
盏灯1 小时前
Trae:从设计到接口,全栈自动化IDE
人工智能·trae