gpt4 book ai didi

python - LSTM RNN 同时预测多个时间步长和多个特征

转载 作者:行者123 更新时间:2023-12-01 06:42:13 25 4
gpt4 key购买 nike

我有一个来自 4 个温度传感器的数据集,用于测量建筑物内/周围的不同位置: enter image description here

我正在训练一个模型,该模型采用形状 (96, 4)、4 个传感器的 96 个时间步长的输入。由此,我想预测每个传感器 future 的 48 个点,形状为 (48, 4)。

到目前为止,我已经实现了仅预测一个传感器的实现。我主要关注this section from the TensorFlow tutorials .

我的列车 X 的形状为 (6681, 96, 4),列车 Y 的形状为 (6681, 48),因为我已将其限制为仅一个传感器。如果我在训练时将火车 Y 更改为 (6681, 48, 4) 我当然会得到 ValueError: Dimensions must be equal, but are 48 and 4 for 'loss/dense_loss/sub' (op: 'Sub') with input shapes: [?,48], [?,48,4].因为我的模型不期望这种形状。

我遇到困难的是 LSTM 层的输入/输出形状。我只是不知道如何完成 (BATCH_SIZE, 48, 4) 的形状。

这是我目前的图层设置:

tf.keras.backend.clear_session()


print("Input shape", x_train_multi.shape[-2:])

multi_step_model = tf.keras.models.Sequential()
multi_step_model.add(tf.keras.layers.LSTM(32,
return_sequences=True,
input_shape=x_train_multi.shape[-2:]))
multi_step_model.add(tf.keras.layers.Dropout(rate=0.5)) # Dropout layer after each LSTM to reduce overfitting.
multi_step_model.add(tf.keras.layers.LSTM(16, activation='relu'))
multi_step_model.add(tf.keras.layers.Dropout(rate=0.5))
# The argument to Dense shapes the results to give the number of time steps we want.
# But how do I make it keep 4 features as well?!?
multi_step_model.add(tf.keras.layers.Dense(future_target / STEP))
multi_step_model.compile(optimizer=tf.keras.optimizers.RMSprop(clipvalue=1.0), loss='mae')

# Shape of predictions
for x, y in val_data_multi.take(1):
print ("Prediction shape", multi_step_model.predict(x).shape)

一些想法:

  • 我是否只是遗漏了某些内容或忘记为要使用的输出特征/维度设置参数?
  • 我需要训练单独的 RNN 来预测每个传感器吗?

谢谢! :)

最佳答案

我最终通过使用密集层来实现这一目标,其中我想要的时间步数乘以我预测的特征数量。然后,我将其重新整形为我想要的输出形状。

我不确定这是否是执行此操作的最佳方法,但它工作正常。

#Experimental code for predicting multiple sensors
import tensorflow.keras.layers as tfl

tf.keras.backend.clear_session()


print("Input shape", x_train_multi.shape[-2:])
# Input shape (96, 4)

multi_step_model = tf.keras.Sequential()
multi_step_model.add(tf.keras.layers.LSTM(32, return_sequences=True, input_shape=x_train_multi.shape[-2:]))
multi_step_model.add(tf.keras.layers.Dropout(rate=0.5))
multi_step_model.add(tf.keras.layers.LSTM(16, return_sequences=False, activation='relu'))
multi_step_model.add(tf.keras.layers.Dropout(rate=0.5))
print("After LSTMs", multi_step_model.output_shape)
# After LSTMs (None, 16)
multi_step_model.add(tf.keras.layers.Dense((future_target / STEP) * 4))
print("After Dense Layer", multi_step_model.output_shape)
# After Dense Layer (None, 192)
multi_step_model.add(tf.keras.layers.Reshape((int(future_target / STEP), 4)))
print("After Reshape", multi_step_model.output_shape)
# After Reshape (None, 48, 4)


multi_step_model.compile(optimizer=tf.keras.optimizers.RMSprop(clipvalue=1.0), loss='mae')

# Shape of predictions
for x, y in val_data_multi.take(1):
print ("Prediction shape", multi_step_model.predict(x).shape)
# Prediction shape (512, 48, 4)

关于python - LSTM RNN 同时预测多个时间步长和多个特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59397229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com