如何将 5D 张量输入 LSTM?

how to feed 5D tensor into LSTM?

我有 3D CNN 网络的输入形状为 (150, 80, 80, 16, 3) 的视频数据。

我得到形状为 (150, 7, 7, 2, 512) 的 conv 层的输出,表示:

150 序列数

7,7 高度和宽度

2 个时间维度

512 个特征图

我想将其输入 LSTM,因此我将输出数据重塑为:

model.add(Reshape((1, 7*7*2*512)))
model.add(LSTM(100, return_sequence=true))

它适用于 LSTM 但我不确定这是否正确(我是否应该根据我们选择的时间维度将时间-space = 16 并将特征编号更改为 3136在一开始的时候)。我知道 LSTM 应该得到一个形状为 (sequences, time-space, features).

的数据

如果您有任何建议,我将很高兴。

谢谢

你真的很接近,但你错过了组织 timesteps 或时间维度的关键步骤。您所追求的是 (150, 2, 7*7*512),它表示 150 个样本、2 个时间步长和扁平化特征。所以你可以先置换再整形:

model.add(Permute((3, 1, 2, 4)) # (samples, 2, 7, 7, 512)
model.add(Reshape((2, 7*7*512)) # (samples, 2, 7*7*512)

现在 LSTM 将处理扁平图像特征的 2 个时间步长。

请注意,对于每个时间步,这实际上是非常大的特征 space,您可能希望通过池化操作或其他 CNN 层来减少特征集。