我有一个这种形状的序列输入:(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?
答案 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()