【问题标题】:how to feed 5D tensor into LSTM?如何将 5D 张量输入 LSTM?
【发布时间】:2018-06-04 22:13:04
【问题描述】:

我的 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,但我不确定这是否正确(我是否应该将时空 = 16 并将特征编号更改为 3136,基于我们一开始选择的时间维度)。我知道 LSTM 应该得到具有形状(序列、时空、特征)的数据。

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

谢谢

【问题讨论】:

    标签: python keras reshape lstm convolutional-neural-network


    【解决方案1】:

    你真的很接近,但你错过了组织时间步数或时间维度的关键步骤。你所追求的是(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 个时间步的扁平图像特征。

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

    【讨论】:

    • 感谢您的回答,我按照您说的做了,我使用 3D 卷积和池化层将特征图减少到 128 个。问题是当我在这些层之后使用 LSTM 时准确度仍然下降,而当我移除 LSTM 层时它会上升。请问有什么理由吗?
    • LSTM 可以学习改进结果的时间步长之间没有相关性。
    • 你的意思是我应该增加时间步长吗?如果是这样,我应该返回上一层以获得更多时间维度还是将当前形状重塑为(2 * 7、7 * 512)?谢谢
    • 我不知道,你可以增加并测试看看会发生什么。在那种情况下,您需要获得更多的时间维度是的。
    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多