如何将 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 层来减少特征集。
我有 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 层来减少特征集。