堆叠LSTM网络中每个LSTM层的输入是什么?

时间:2019-03-27 20:27:52

标签: deep-learning lstm recurrent-neural-network stacked

我很难理解堆叠LSTM网络中各层的输入输出流。假设我已经创建了一个堆叠的LSTM网络,如下所示:

# parameters
time_steps = 10
features = 2
input_shape = [time_steps, features]
batch_size = 32

# model
model = Sequential()
model.add(LSTM(64, input_shape=input_shape,  return_sequences=True))
model.add(LSTM(32,input_shape=input_shape))

我们的堆叠LSTM网络由2个LSTM层组成,分别具有64个和32个隐藏单元。在这种情况下,我们希望在每个时间步长,第一LSTM层-LSTM(64)-作为输入传递到第二LSTM层-LSTM(32)-一个大小为[batch_size, time-step, hidden_unit_length]的向量当前时间步的第一个LSTM层的隐藏状态。令我困惑的是:

  1. 第二层LSTM层-LSTM(32)-是否接收X(t)(作为输入),并将大小为[batch_size, time-step, hidden_unit_length]的第一层-LSTM(64)-的隐藏状态传递给它通过自己的隐藏网络-在这种情况下,由32个节点组成??
  2. 如果第一个为真,那么当第二个仅处理第一层的隐藏状态时,为什么第一个-LSTM(64)-和第二个-LSTM(32)-的input_shape是相同的?在我们的情况下,input_shape是否应设为[32, 10, 64]

我发现下面的LSTM可视化非常有用(找到here),但是它在stack-lstm网络上没有扩展: LSTM workings

任何帮助将不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:1)

input_shape仅在第一层是必需的。后续层将上一层的输出作为输入(因此,它们的input_shape参数值将被忽略)

下面的模型

model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=(5, 2)))
model.add(LSTM(32))

代表以下架构

enter image description here

您可以从model.summary()验证它

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_26 (LSTM)               (None, 5, 64)             17152     
_________________________________________________________________
lstm_27 (LSTM)               (None, 32)                12416     
=================================================================

替换行

model.add(LSTM(32))

model.add(LSTM(32, input_shape=(1000000, 200000)))

仍然会为您提供相同的体系结构(使用model.summary()进行验证),因为input_shape被忽略,因为它将上一层的张量输出作为输入。

如果您需要一个序列来像下面的序列进行构建

enter image description here

您应该使用以下代码:

model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=(5, 2)))
model.add(LSTM(32, return_sequences=True))

应该返回模型

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_32 (LSTM)               (None, 5, 64)             17152     
_________________________________________________________________
lstm_33 (LSTM)               (None, 5, 32)             12416     
=================================================================

答案 1 :(得分:0)

在keras文档中,提到的输入是[batch_size, time-step, input_dim],而不是[batch_size, time-step, hidden_unit_length],所以我认为64、32对应X输入具有64个功能,而LSTM-32每次具有32个功能,步骤。