tensorflow 如何确定将选择哪些 LSTM 单元作为输出?

Posted

技术标签:

【中文标题】tensorflow 如何确定将选择哪些 LSTM 单元作为输出?【英文标题】:How does tensorflow determine which LSTM units will be selected as outputs? 【发布时间】:2021-06-12 13:31:33 【问题描述】:

我使用以下代码创建了一个 LSTM 模型:

model = tensorflow1.keras.Sequential()

model.add(tensorflow1.keras.layers.LSTM(128, input_shape=(720, 4), return_sequences=True)) model.add(tensorflow1.keras.layers.LeakyReLU(alpha=0.5)) model.add(tensorflow1.keras.layers.LSTM(128, return_sequences=True)) model.add(tensorflow1.keras.layers.LeakyReLU(alpha=0.5)) model.add(tensorflow1.keras.layers.Dropout(0.3)) model.add(tensorflow1.keras.layers.LSTM(64, return_sequences=False)) model.add(tensorflow1.keras.layers.Dropout(0.3)) model.add(tensorflow1.keras.layers.Dense(1))

对于代码model.add(tf.keras.layers.LSTM(128, input_shape=(720,4), return_sequences=True)),在我的理解中,代码会有128个LSTM输出单元,一个输入720 个时间步长和 4 个特征的形状。 根据 tensorflow keras 文档,单位是指“输出空间的维度”。 (https://www.tensorflow.org/api_docs/python/tf/keras/layers/LSTM)

我的问题是:在 720 个单元格中,作为输出单元的 128 个单元格中的哪一个会被选为输出单元格? tensorflow如何选择选择哪些单元格作为输出?

【问题讨论】:

能否给出完整的型号代码?因为要了解您的问题,需要更多详细信息。但我认为 LSTM 可以返回整个隐藏状态序列。检查此blog from machine learning mastery。我认为它解决了您的疑问。 这是一个常见的误解,只有 128 个单元,而不是 720 个。每个单元都与输入完全连接。所以只有 128 个输出,而不是 720 个。TensorFlow 在这里没有选择任何东西。 【参考方案1】:

第一层由 128 个 LSTM 单元组成。

每个单元格都会给出一个输出,作为后续层的输入。

由于您选择(正确)“return_sequences=True”,由于序列展开,每个 LSTM 单元将在每个时间步提供一个输出值。

因此,对于第一个 LSTM 层,对于 720 个时间步长中的每一个,您将有 128 个输出值(每个单元一个)。

也许这有助于理解: https://www.tensorflow.org/guide/keras/rnn

【讨论】:

以上是关于tensorflow 如何确定将选择哪些 LSTM 单元作为输出?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow:如何将预训练模型已经嵌入的数据输入到 LSTM 模型中?

TensorFlow LSTM Dropout 实现

如何将 keras LSTM 层的输出输入到输入层?

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

如何使用 Tensorflow2.0 alpha 堆叠卷积层和 LSTM?

如何在 LSTM 中实现 Tensorflow 批量归一化