具有多个输入特征和多个输出的 LSTM

LSTM with multiple input features and multiple outputs

给定 30 个时间戳,每个时间戳具有 3 个特征,我想预测一个包含 4 个不同数量的输出。

我有一个 X_train 和 y_train 形状分别为 (72600, 30, 3)(72600, 4)

其中 X_train、

例如 X_train[0] 看起来像这样:

[
    [1,2,3],
    [4,5,6],
    ... such 30 rows 
]

而在y_train中,4表示要预测的输出个数。

我尝试了下面的代码,

model = Sequential()
model.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
model.add(Dense(units = 4))

通过单个大小为 (1, 30, 3) 的样本后,我从该模型获得的输出的形状为:(1, 30, 4) 但我只想要形状 (1, 4) 的输出。

那我该怎么做呢?

在最后一个 LSTM 图层中,您必须将 return_sequences 参数设置为 False 以获得一维输出:

import tensorflow as tf

model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(units = 50, return_sequences = True, input_shape = (30, 3)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.LSTM(units = 50, return_sequences = True))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.LSTM(units = 50))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(units = 4))

model(tf.random.normal((1, 30, 3)))
<tf.Tensor: shape=(1, 4), dtype=float32, numpy=
array([[-1.3130311e-03,  1.0584719e-02, -6.3279571e-05, -2.3087783e-02]],
      dtype=float32)>

因此,不是返回给定序列的序列,而是最后一个 LSTM 层 returns 只有最后一个 LSTM 单元格的输出状态。