当前位置: 首页 > news >正文

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

一、问题引出

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

torch.stack()
torch.cat()

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

二、问题解决

1.torch.cat()

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

# 假设是时间步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,并且多出的那个维度就是拼接的维度,那个维度的大小就是输入张量的个数。

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

http://www.lryc.cn/news/164762.html

相关文章:

  • 【算法与数据结构】235、LeetCode二叉搜索树的最近公共祖先
  • bboss 流批一体化框架 与 数据采集 ETL
  • JVM详细教程
  • Smartbi吴华夫:后疫情时代,BI发展趋势的观察与应对
  • 软件设计模式系列之三———工厂方法模式
  • pytorch 多卡分布式训练 调用all_gather_object 出现阻塞等待死锁的问题
  • SpringMvc增删改查
  • 【计算机网络】网络编程接口 Socket API 解读(5)
  • 手动实现一个bind函数!
  • 数据结构-时间复杂度/空间复杂度
  • 英语写作中“展示”、“表明”demonstrate、show、indicate、illustrate的用法
  • Redis的java客户端
  • Android环境配置笔记
  • element-table 行的拖拽更改顺序(无需下载sortableJs
  • Docker部署jenkins
  • 从0到1学会Git(第三部分):Git的远程仓库链接与操作
  • 虚拟机Ubuntu操作系统常用终端命令(1)(详细解释+详细演示)
  • redis实战-redis实现异步秒杀优化
  • Python爬虫-IP隐藏技术与代理爬取
  • 二刷力扣--链表
  • 返回值加const ,为了不拷贝得到成员的值,但被赋值的左值也要const
  • 本地如何使用HTTPS进行调试
  • 观察者模式:对象之间的订阅机制
  • 【1462. 课程表 IV】
  • Kerberos 身份验证
  • R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间...
  • 通付盾入选2023年度“上市苗圃工程”重点企业
  • SpringMVC之文件上传下载
  • 嵌入式IDE(2):KEIL中SCF分散加载链接文件详解和实例分析
  • Linux防火墙常用操作及端口开放