理解 LSTM 中的输入和输出形状 | tf.keras.layers.LSTM(以及对于return_sequences的解释)

  • Post author:
  • Post category:其他


  • 即使我们从理论上理解 LSTM,在将数据拟合到网络时,我们中的许多人仍然对其输入和输出形状感到困惑。 本指南将帮助您了解 LSTM 的输入和输出形状。

让我们首先了解 LSTM Keras 中的 Input 及其形状。 LSTM 的输入数据如下图所示。

在这里插入图片描述

您始终必须提供一个三维数组作为 LSTM 网络的输入。 其中第一个维度表示batch_size,第二个维度表示time_steps,第三个维度表示一个输入序列中的单元数units。 例如,输入形状看起来像 (batch_size, time_steps, units)。 让我们看一个 Keras 中的例子。

在这里插入图片描述

让我们看看 input_shape 参数。 虽然看起来输入是一个 2D 数组,但我们实际上必须传递一个形状为 (batch_size, 2, 10) 的 3D 数组。 表示时间步长的值为 2,输入单位为 10,您可以在将数据拟合到网络时灵活地提供任何批量大小。

在这里插入图片描述

您还可以提供一个名为 batch_input_shape 的参数而不是 input_shape。 不同之处在于您现在必须提供固定的批量大小,并且您的输入数组形状将类似于 (8, 2, 10)。 如果您尝试输入 8 以外的不同批次大小,则会出现错误。

现在,让我们看看 LSTM 网络中的输出及其形状。

在这里插入图片描述

让我们看看其他的参数。 参数units表示 LSTM 中输出单元的数量,这里是 3。 所以输出形状是 (None, 3)。 输出的第一维是 None 因为我们事先不知道批量大小。 所以实际的输出形状将是 (batch_size, 3) 这里。

在这里插入图片描述

在这里我们看到我预先定义了batch_size=8,那么很自然的输出形状变成了(8, 3)

在这里插入图片描述

现在,看看另一个参数 return_sequences。 这个参数告诉是否在每个时间步而不是最后一个时间步返回输出。 当我们将 return_sequences 设置为 True 时,输出形状变为 3D 数组,而不是 2D 数组。 现在输出的形状是 (8, 2, 3)。 我们看到中间有一个额外的维度表示时间步长。



概括

LSTM 的输入总是一个 3D 数组。 (batch_size, time_steps, 单位)

LSTM 的输出可以是 2D 数组或 3D 数组,具体取决于 return_sequences 参数。

如果 return_sequence 为 False,则输出为二维数组。 (batch_size, units)

如果 return_sequence 为 True,则输出为 3D 数组。 (batch_size, time_steps, units)



参考资料

https://shiva-verma.medium.com/understanding-input-and-output-shape-in-lstm-keras-c501ee95c65e



版权声明:本文为weixin_42887138原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。