如何用4维输入输入LSTM?

时间:2017-11-21 10:02:30

标签: python machine-learning keras lstm

我有一个这种形状的序列输入:(6000, 64, 100, 50)

6000只是样本序列的数量。每个序列的长度为64

我计划使用Keras将此输入符合LSTM。

我以这种方式设置我的输入:

input = Input(shape=(64, 100, 50))

这给了我一个(?, 64, 100, 50)

的输入形状

然而,当我将input放入我的LSTM中时:

x = LSTM(256, return_sequences=True)(input)

我收到此错误:

  

输入0与图层lstm_37不兼容:找到预期的ndim = 3   NDIM = 4

如果我的输入形状类似于(?, 64, 100),但如果我的第四维度不是这样,那么这会有效。

这是否意味着LSTM只能输入3维?如何使用Keras将4或甚至更高维度的输入馈入LSTM?

2 个答案:

答案 0 :(得分:4)

答案是你不能。

Keras文档为Recurrent Layer提供以下信息:

输入形状

形状为(batch_size, timesteps, input_dim)的3D张量。

在你的情况下,你有64个时间步,每个步骤的形状(100,50)。让模型工作的最简单方法是将数据重塑为(100 * 50)。

Numpy提供了一个简单的功能:

X = numpy.zeros((6000, 64, 100, 50), dtype=numpy.uint8)
X = numpy.reshape(X, (6000, 64, 100*50))

这是合理的还是不高度取决于您的数据。

答案 1 :(得分:1)

您还可以考虑TimeDistributed(LSTM(...))

inp = Input(shape=(64, 100, 50))
x = TimeDistributed(LSTM(256, return_sequences=True))(inp)

model = Model(inp, x)
model.compile('adam', 'mse')
model.summary()