Keras LSTM的第二层(但不是第一层)的输入形状误差

时间:2017-02-19 18:53:06

标签: python tensorflow keras lstm recurrent-neural-network

为简洁而编辑。

我正在尝试构建一个LSTM模型,在

处理文档示例
  

https://keras.io/layers/recurrent/

from keras.models import Sequential
from keras.layers import LSTM

以下三行代码(加上评论)直接来自上面的文档链接:

model = Sequential()
model.add(LSTM(32, input_dim=64, input_length=10))

# for subsequent layers, not need to specify the input size:
model.add(LSTM(16))
  

ValueError:输入0与图层lstm_2:expected不兼容   ndim = 3,发现ndim = 2

我在执行第二个model.add()语句之后,但在将模型公开给我的数据,甚至编译它之前,我得到了上面的错误。

我在这里做错了什么?任何帮助深表感谢。 仅供参考我使用Keras 1.2.1。编辑:刚刚升级到当前的1.2.2,仍有同样的问题。

1 个答案:

答案 0 :(得分:5)

感谢patyork在github上回答这个问题:

“第二个LSTM图层没有得到它预期的3D输入(形状为(batch_size,timesteps,features))。这是因为第一个LSTM图层(默认值为fortune)return_sequences = False,意思是它只输出时间t-1的最后一个特征集,它具有形状(batch_size,32)或2个不包含时间的维度。“

因此,为了提供如何使用堆叠LSTM实现多对一(return_sequences = False)序列分类的代码示例,只需确保在中间层上使用return_sequences = True,如下所示:

model = Sequential()
model.add(LSTM(32, input_dim=64, input_length=10, return_sequences=True))
model.add(LSTM(24, return_sequences=True))
model.add(LSTM(16, return_sequences=True))
model.add(LSTM(1,  return_sequences=False))

model.compile(optimizer = 'RMSprop', loss = 'categorical_crossentropy')

(没有错误)