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

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解 LSTM 中的输入和输出形状 | tf.keras.layers.LSTM(以及对于return_sequences的解释)相关的知识,希望对你有一定的参考价值。

  • 即使我们从理论上理解 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

以上是关于理解 LSTM 中的输入和输出形状 | tf.keras.layers.LSTM(以及对于return_sequences的解释)的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch 中的双向 LSTM 输出问题

LSTM 神经网络输入/输出尺寸错误

Keras LSTM 错误 - Logits 和标签应该具有相同的形状

从通用句子编码器输出为 LSTM 生成输入

了解 LSTM 的输出形状

如何在 MultiOutput LSTM Tensorflow 中优先考虑某些输出?