首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将四维特征张量的维数从ResNet降至二维LSTM模型

将四维特征张量的维数从ResNet降至二维LSTM模型
EN

Stack Overflow用户
提问于 2022-06-11 11:30:41
回答 2查看 184关注 0票数 0

我正在设计一个机器学习模型,它从ResNet获取一个特征张量,并使用LSTM来识别图像中的字母序列。来自ResNet的特征张量是4-D,但是LSTM_cell需要2-D的输入。我知道其他方法,如.view()和.squeeze(),它们能够减少维度。但是,如果我这样做的话,它就会改变特征向量的维数。首先,向量是128,2,5,512,但它需要是128,512。但是,调用.view(-1, 512 )会使维度乘以得到1280,512。你将如何改变维度而不加乘?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-12 14:32:49

CNN的输出应该是一个三维张量(例如[128, x, 512]),这样它就可以作为一个序列来处理。然后,您可以使用一个nn.LSTMCell() x-迭代for-循环将它们输入到中。

然而,四维张量仍然是一些空间特征,不宜输入LSTM.一个典型的做法是重新设计你的CNN架构,以确保它产生一个三维张量。例如,您可以在CNN网络的末尾添加一个nn.Conv2d()或其他东西,以使输出成为[128, x, 512]形状。

票数 1
EN

Stack Overflow用户

发布于 2022-06-11 13:11:41

顺便提一句:你想要达到的目标与改变张量的形状无关。torch.viewtorch.squeeze都不影响张量所包含的底层数据,但仅作用于张量的表观布局,即其形状,而数据保持不变。

所有这些整形算子(torch.viewtorch.reshapetorch.unsqueezetorch.squeezetorch.transposetorch.permute)都将保持元素数不变,因为张量的内容与完全相同。

在您的例子中,您试图将张量的维数从[128, 2, 5, 512]降到[128, 512]。一般来说,Resnet会在分类器层之后输出三维张量(b, c),但是这里我假设您仍然有空间维,因为它是4d。根据您的输出所代表的内容,您可以将其输入到一个完全连接的层中,以降低其维度,或者在某些维度上提供最大/平均池。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72583957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档