我有一个来自4个温度传感器的数据集,这些温度传感器测量建筑物内/周围的不同位置:
我正在训练一个模型,该模型需要为4个传感器输入形状(96、4),96个时间步长。由此,我想预测形状(48,4)的每个传感器在未来的48个点。
到目前为止,我已经实现了一个仅预测一个传感器的实现。我主要关注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)
一些想法:
谢谢! :)
答案 0 :(得分:0)
最后,我设法通过使用密集层来实现这一目标,将所需的时间步数乘以我所预测的特征数。然后,将其重塑为所需的输出形状。
我不确定这是否是执行此操作的最佳方法,但是可以。
#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)