如何获取Keras搭建的LSTM模型在训练集上的预测结果
LSTM模型获取训练集预测结果实现方法
现有代码说明
当前使用的双层LSTM网络用于单变量多特征预测任务,已完成训练集、测试集拆分,核心代码如下:
from keras.layers import Dense, LSTM, Dropout model=Sequential() model.add(LSTM(units=50,return_sequences=True, input_shape=(1,5))) model.add(Dropout(0.2)) model.add(LSTM(units=50)) model.add(Dropout(0.2)) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(X_train_shape,y_train, epochs=100, batch_size=48)
上述代码训练完成后仅支持输出测试集预测结果,无法直接获取训练集的拟合预测值。
实现方法
Keras框架中训练完成的模型可通过predict()方法对任意符合输入维度要求的数据集做推理,不需要修改模型结构或重新训练,只需在训练完成后分别传入训练集、测试集的特征矩阵即可得到对应预测结果。
操作步骤
- 确认训练集特征矩阵
X_train_shape维度匹配模型输入要求,即形状满足(样本数, 1, 5),和训练时传入的输入形状一致 - 模型训练结束后,分别传入训练集特征、测试集特征调用
predict()方法,分别存储两个数据集的预测结果 - 若前期对数据做了归一化/标准化处理,需要对得到的
train_predict、test_predict和对应真实值做反归一化,才能和原始数据尺度对齐做效果评估
修改后完整代码
# 补全原代码缺失的Sequential导入,否则运行会报NameError from keras.models import Sequential from keras.layers import Dense, LSTM, Dropout model=Sequential() model.add(LSTM(units=50,return_sequences=True, input_shape=(1,5))) model.add(Dropout(0.2)) model.add(LSTM(units=50)) model.add(Dropout(0.2)) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') # 执行模型训练 model.fit(X_train_shape,y_train, epochs=100, batch_size=48) # 获取两个数据集的预测结果 train_predict = model.predict(X_train_shape) # 训练集预测结果 test_predict = model.predict(X_test_shape) # 测试集预测结果
提示:训练集预测结果反映的是模型训练完成后对训练数据的拟合能力,不要将其和训练过程中每个epoch批次输出的临时训练预测值混淆。如果需要绘制拟合曲线、计算训练集MSE等指标,直接使用
train_predict和真实值y_train计算即可。
内容的提问来源于stack exchange,提问作者Bouram
相关产品推荐
相关产品推荐

