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

发布于 2021-01-29 14:10:14

我正在尝试构建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不兼容:预期ndim = 3,找到的ndim = 2

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

我在这里做错了什么?我正在使用Keras 1.2.1。

编辑

刚刚升级到当前的1.2.2,仍然存在相同的问题。

关注者
0
被浏览
234
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    第二个LSTM层未获得预期的3D输入(形状为(batch_size,时间步长,特征)。这是因为第一个LSTM层具有(按默认值计算)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')
    

    (没有错误)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看