如何在keras中堆叠多个lstm?
deep-learning
keras
keras-layer
lstm
6
0

我正在使用深度学习库keras,并尝试没有运气就堆叠了多个LSTM。下面是我的代码

model = Sequential()
model.add(LSTM(100,input_shape =(time_steps,vector_size)))
model.add(LSTM(100))

上面的代码在第三行中返回错误Exception: Input 0 is incompatible with layer lstm_28: expected ndim=3, found ndim=2

输入X是形状的张量(100,250,50)。我在张量流后端上运行keras

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

@DanielAdiwardana的答案的详细说明。我们需要为除最后一层之外的所有LSTM层添加return_sequences = True

将此标志设置为True可使Keras知道LSTM输出应包含所有历史生成的输出以及时间戳( 3D )。因此, 下一个LSTM层可以进一步处理数据。

如果此标志为false ,则LSTM仅返回最后一个输出( 2D )。这样的输出对于另一个LSTM层来说还不够好

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

在侧面注意 :::添加了最后一个密集层,以获取用户所需格式的输出。这里的Dense(10)表示将使用softmax激活生成10个不同的类输出。

如果您将LSTM用于时间序列 ,则应具有Dense(1)。因此只给出一个数字输出。

收藏
评论

您需要在第一层添加return_sequences=True ,以便其输出张量具有ndim=3 (即批大小,时间步长,隐藏状态)。

请参见以下示例:

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

来自: https ://keras.io/getting-started/sequential-model-guide/(搜索“ stacked lstm”)

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号