如何利用Keras中的长、短期记忆模型进行预测
开发LSTM模型的目标是你可以在序列预测问题上使用的最终模型。
在这篇文章中,你将了解如何最终确定你的模型,并使用它对新数据进行预测。
完成这篇文章后,你将知道:
- 如何训练最终的LSTM模型。
- 如何保存最终的LSTM模型,并在以后再次加载。
- 如何对新数据进行预测。
我们开始吧。
步骤1. 训练最终模型
什么是最终的LSTM模型?
最终的LSTM模型是用于对新数据进行预测的模型。
也就是说,给定输入数据的新示例,你希望使用模型来预测预期输出。这可以是分类(分配标签)或回归(实际值)。
序列预测项目的目标是得到执行最佳的最终模型,其中“最佳”由以下各项定义:
- 数据:你拥有的历史数据。
- 时间:你必须在这个项目上花费的时间。
- 步骤:数据准备步骤、算法或算法,以及选择的算法配置。
在你的项目中,你将收集数据,花费你所拥有的时间,并了解数据准备过程、要使用的算法以及如何配置它。
最终的模型是这个过程的顶峰,也就是你为了开始实际做出预测而寻求的终点。
没有完美的模式这回事。只有你能发现的最好的型号。
如何最终确定LSTM模型?
你可以通过对所有数据应用所选的LSTM架构和配置来最终确定模型。
没有训练和测试拆分,也没有交叉验证折叠。将所有数据放回一个大型训练数据集中,并适合你的模型。
就这样。
使用最终模型,你可以:
- 保存模型以供以后或操作使用。
- 加载模型并对新数据进行预测。
有关训练最终模型的更多信息,请参见帖子:
步骤2.保存最终模型
Keras提供了允许你将模型保存到文件的API。
模型保存为HDF5文件格式,可在磁盘上高效地存储大型数字数组。你需要确认已经安装了h5py Python库。可以按如下方式安装:
sudo pip install h5py
可以使用模型上的save()函数将拟合Keras模型保存到文件。
例如:
# define model model = Sequential() model.add(LSTM(...)) # compile model model.compile(...) # fit model model.fit(...) # save model to single file model.save('lstm_model.h5')
此单个文件将包含模型体系结构和权重。它还包括所选损失和优化算法的规范,以便你可以恢复训练。
可以使用load_model()函数再次加载模型(从不同Python会话中的不同脚本)。
from keras.models import load_model # load model from single file model = load_model('lstm_model.h5') # make predictions yhat = model.predict(X, verbose=0) print(yhat)
下面是一个完整的示例,说明如何拟合LSTM模型,将其保存到单个文件中,然后再次加载。虽然模型的加载在同一个脚本中,但这一节可以从另一个Python会话中的另一个脚本运行。运行该示例会将模型保存到文件lstm_model.h5。
from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from numpy import array from keras.models import load_model # return training data def get_train(): seq = [[0.0, 0.1], [0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((len(X), 1, 1)) return X, y # define model model = Sequential() model.add(LSTM(10, input_shape=(1,1))) model.add(Dense(1, activation='linear')) # compile model model.compile(loss='mse', optimizer='adam') # fit model X,y = get_train() model.fit(X, y, epochs=300, shuffle=False, verbose=0) # save model to single file model.save('lstm_model.h5') # snip... # later, perhaps run from another script # load model from single file model = load_model('lstm_model.h5') # make predictions yhat = model.predict(X, verbose=0) print(yhat)
有关保存和加载Keras模型的详细信息,请参见文章:
步骤3.对新数据进行预测
在最终确定模型并将其保存到文件后,可以加载它并使用它进行预测。
例如:
- 在序列回归问题上,这可能是对下一个时间步的实际值的预测。
- 在序列分类问题上,这可能是给定输入序列的类结果。
或者,它可能是基于序列预测问题的具体情况的任何其他变体。在给定输入序列(X)的情况下,你可能需要模型(Yhat)的结果,其中序列(Y)的真实结果当前是未知的。
你可能对在生产环境中进行预测(作为界面的后端)或手动进行预测感兴趣。这真的取决于你项目的目标。
在拟合最终模型之前对训练数据执行的任何数据准备都必须在做出预测之前应用于任何新数据。
预测是最容易的部分。
它包括获取准备好的输入数据(X),并在加载的模型上调用KERAS预测方法之一。
请记住,用于进行预测的输入(X)仅由进行预测所需的输入序列数据组成,而不是所有先前训练数据。在预测一个序列中的下一个值的情况下,输入序列将是1个样本,其中包含定义和拟合模型时使用的固定时间步数和特征。
例如,输出层的激活函数的形状和规模的原始预测可以通过调用模型上的predict()函数来进行:
X = ... model = ... yhat = model.predict(X)
可以通过对模型调用predict_classes()函数来预测类索引。
X = ... model = ... yhat = model.predict_classes(X)
可以通过对模型调用predict_proba()函数来预测概率。
X = ... model = ... yhat = model.predict_proba(X)
有关你的Keras模型生命周期的更多信息,请参见帖子:
进一步阅读
如果你想深入了解,本节提供了更多有关该主题的资源。
文章
API接口
摘要
在这篇文章中,你了解了如何最终确定模型并使用它对新数据进行预测。
具体地说,你了解到:
- 如何训练最终的LSTM模型。
- 如何保存最终的LSTM模型,并在以后再次加载。
- 如何对新数据进行预测。