如何利用多数据集训练LSTM模型实现时间序列预测?
多文件时间序列LSTM训练的优化问题
我需要用LSTM模型做时间序列预测,数据集由3个结构完全一致的Excel文件组成:每个文件都是设备每分钟采集1个数值,实验时长相同,单文件的数据量完全一致。
单文件训练时,我可以将数据整理成*(样本数, 时间步长, 特征数)的3维张量,模型能正常运行。但同时处理3个文件时,得到的输入张量形状是(3, 252, 1, 1)*的4维结构,而LSTM层仅支持3维输入,无法直接使用。
我尝试过两种处理方式:
- 拼接数据集训练:将3个文件的数据拼接成单个数据集,设置
batch_size=252(单文件的样本数)来避免不同实验数据混合,但最终预测效果远不如单实验训练的结果。实现代码如下:
def build_model(): model = keras.Sequential([ layers.Masking(mask_value = 0.0, input_shape=[1,1]), layers.LSTM(50, return_sequences=True), layers.Dense(1) ]) optimizer = tf.keras.optimizers.Adam(0.001) model.compile(loss='mse', optimizer=optimizer, metrics=['mae','RootMeanSquaredError']) return model model_pred = build_model() model_pred.fit(Xchopped_train, ychopped_train, batch_size = 252, epochs=500, verbose=1)
其中Xchopped_train和ychopped_train是3个Excel文件拼接后的数据集。
- 循环单文件训练:遍历每个文件单独训练,每个文件训练167轮,目前这个方法的预测效果最好,但我不清楚这种训练方式下神经网络权重的更新逻辑、损失函数的优化过程,想咨询是否有更高效的实现方式。实现代码如下:
for i in range(len(Xtrain)): model_pred.fit(Xtrain[i], Ytrain[i], epochs=167, verbose=1)
Xtrain的形状为(3,252,1,1),第一个索引对应Excel文件的序号。
内容的提问来源于stack exchange,提问作者Duktti
相关产品推荐
相关产品推荐

