具有多个输入特征和多个输出的 LSTM
LSTM with multiple input features and multiple outputs
给定 30 个时间戳,每个时间戳具有 3 个特征,我想预测一个包含 4 个不同数量的输出。
我有一个 X_train 和 y_train 形状分别为 (72600, 30, 3)
和 (72600, 4)
。
其中 X_train、
- 72600表示样本数
- 30代表考虑的时间戳数量
- 3代表每个时间戳的特征数量
例如
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
单元格的输出状态。
给定 30 个时间戳,每个时间戳具有 3 个特征,我想预测一个包含 4 个不同数量的输出。
我有一个 X_train 和 y_train 形状分别为 (72600, 30, 3)
和 (72600, 4)
。
其中 X_train、
- 72600表示样本数
- 30代表考虑的时间戳数量
- 3代表每个时间戳的特征数量
例如 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
单元格的输出状态。