做搜狗网站快速排名软,微信网站建设信息,劳务外包公司,构建企业门户网站的方法一、问题引出
好久没更新啦#xff01;最近在学习沐神《动手学深度学习》6.5节池化层的时候#xff0c;发现沐神在两处相似的地方使用了两种Python拼接函数torch.cat()和torch.stack()#xff1a; 百思不得其解#xff0c;于是查阅相关文档之后终于弄清楚了两者之间的区别…一、问题引出
好久没更新啦最近在学习沐神《动手学深度学习》6.5节池化层的时候发现沐神在两处相似的地方使用了两种Python拼接函数torch.cat()和torch.stack() 百思不得其解于是查阅相关文档之后终于弄清楚了两者之间的区别遂做总结如下。
二、问题解决
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),dim0).shape)
print(torch.cat((T1,T2),dim1).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),dim0).shape)
print(torch.stack((T1,T2),dim1).shape)
print(torch.stack((T1,T2),dim2).shape)输出为 三、总结
总的来说cat 和 stack的区别在于 cat会增加现有维度的值,可以理解为续接stack会新加增加一个维度可以理解为叠加。
使用stack可以保留两个信息[1. 序列] 和 [2. 张量矩阵] 信息属于【扩张再拼接】的函数。形象的理解假如数据都是二维矩阵(平面)它可以把这些一个个平面(矩阵)按第三维(例如时间序列)压成一个三维的立方体而立方体的长度就是时间序列长度。该函数常出现在自然语言处理NLP和图像卷积神经网络(CV)中。
欢迎大家一起跟着学习沐神的《动手学深度学习》我建了一个github网站发布了我的日常学习笔记欢迎大家star!网址为https://github.com/BugMaker2002/DeepLearningAction-LiMu