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

标签 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)- 是否接收第一层 -LSTM(64)- 的隐藏状态作为 X(t)(作为输入),其大小为 [batch_size, time-step, hidden_​​unit_length] 并通过它自己的隐藏网络传递它 - 在这种情况下由 32 个节点组成 -?
  2. 如果第一个为真,为什么第一个 -LSTM(64)- 和第二个 -LSTM(32)- 的 input_shape 相同,而第二个只处理第一层?在我们的例子中,不应该将 input_shape 设置为 [32, 10, 64] 吗?

我发现下面的 LSTM 可视化非常有用(找到 here )但它不会在堆叠式 lstm 网络上扩展: LSTM workings

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

最佳答案

只有第一层需要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     
=================================================================

关于deep-learning - 堆叠式 LSTM 网络中每个 LSTM 层的输入是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55385906/

相关文章:

python - 在自定义图像数据集上获取 InvalidArgumentError : NewRandomAccessFile failed to Create/Open while working with tf. 数据

python - Pytorch 预训练模型中的类数

TensorFlow:关于 tf.argmax() 和 tf.equal() 的问题

python - 验证数据可以是tensorflow.keras 2.0中的生成器(而训练数据是数组)吗?

python - 在组合网络的子网上使用两种损失

python - Tensorflow ValueError : Shapes (? , 1) 和 (?,) 不兼容

machine-learning - RNN 输出层的梯度是否应该被剪裁?

machine-learning - LSTM 批处理与时间步

keras - 一个时期后过度拟合

python - 在 TensorFlow 中使用 LSTM-CGAN 生成 MNIST 数字