python - 将编码器输出传递到全连接层
问题描述
我有一个基于 LSTM 的编码器,其最终隐藏状态维度为[2, 1, 1024]
. 这里,2 是层数,1 是批量大小,1024 是隐藏大小。我试图将编码形式传递到一个完全连接的层来训练分类器。
问题是torch.nn.Linear
输入的形式(N,∗,Hin)
是 N 是批量大小,Hin 是隐藏大小。鉴于没有提及输入中的层数,我如何重塑编码器的输出torch.nn.Linear
?
解决方案
例如,您可以获取 RNN 的最后一步输出并将其馈送到完全连接的网络中。这将是选择张量的最后一个元素的问题。在这种情况下,第一个密集层将总共有hidden_size
神经元。在这种情况下,密集层的输入将具有(1, out_features)
since的形状batch_size=1
。就像是:
>>> fc = nn.Linear(1024, 512) # for demonstration purposes
>>> x, _ = lstm(x)
>>> fc(x[-1:, 0]).shape
(1, 1024)
或者,您也可以输入整个张量。正如您所描述的,它nn.Linear
适用于多维张量。在这种情况下,我们推断的是 RNN 的整个输出,而不仅仅是它的最后一步输出:
>>> fc = nn.Linear(1024, 512) # for demonstration purposes
>>> x, _ = lstm(x)
>>> fc(x).shape
(2, 1, 512)
但请注意,第二个维度(此处为 size 1
)将仍然是您的批处理轴。如果您不希望以这种方式使用它并且更喜欢将其打开,则可以使用该选项axis=0
进行初始化。你也可以置换和...nn.LSTM
batch_first=True
axis=0
axis=1
要回答您的问题,无需将层数提供给nn.Linear
,它会自动展平除最后一个(特征维度)之外的所有维度,并将输出重新整形为相应的形状。
推荐阅读
- algorithm - 计算 a[i] 最右边或最左边且最大的段
- php - 在 Codeigniter 中注册后如何进行安全的电话号码验证?
- react-native - React 导航钩子在 Class 组件中未按预期工作
- python - 如何使用虚拟环境访问自定义库中的外部文件?
- python - 无法使用 pygame.mixer.music 在歌曲之间循环播放
- mysql - 租同一辆车的人?
- react-intl - ssr react-intl 格式消息无法正常工作
- r - 如何从 R 中的 netcdf 文件中提取降水数据?
- python - 从不和谐运行命令
- python-3.x - Python pandas 通过其他列的条件替换更改单元格值