如何利用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模型,并在以后再次加载。
  • 如何对新数据进行预测。

00

Python

发表评论

邮箱地址不会被公开。 必填项已用*标注

什么阻碍了你实现迈入机器学习领域的目标?

什么阻碍了你实现迈入机器学习领域的目标?

2020-04-22 机器学习

如果你在为进入机器学习领域而挣扎,感觉到有什么东西阻止了自己的开始,那么你应该看看这篇文章。 在这篇文章中,我们会讨论阻止进入机器学习领域的自我限制的信念,让你明白面临的问题。 几乎总是一种自我限制的信念阻碍了你们的进步。 也许你会在一个或多个这样的信念中看到自己。如果是这样的话, [......]

了解详情

R语言机器学习迷你课程

R语言机器学习迷你课程

2020-08-12 机器学习

在这个迷你课程中,你将发现如何开始,构建精确的模型,并自信地完成在14天内使用R预测建模机器学习项目。 这是一个重要而重要的文章。你可能想把它书签。 了解如何准备数据,拟合机器学习模型,并用我的新书评估他们在r上的预测,包括14步教程、3个项目和完整源代码。 我们开始吧。 [......]

了解详情

关于机器学习的几点思考

关于机器学习的几点思考

2020-04-26 机器学习

机器学习是一个大的、跨学科的研究领域。 你可以通过机器学习获得令人印象深刻的结果,并找到非常具有挑战性的问题的解决方案。但这只是更广泛的机器学习领域的一小部分,通常被称为预测建模或预测分析。 在这篇文章中,你将发现如何改变你对机器学习的思考方式,以便更好地为你提供机器学习实践者的服务。 [......]

了解详情

找到你的机器学习部落

找到你的机器学习部落

2020-04-26 机器学习

机器学习是一个充满算法和数据的迷人而强大的研究领域。 问题是,有这么多不同类型的人对机器学习感兴趣,每个人都有不同的需求。重要的是要了解你想要从机器学习中得到什么,并根据这些需求调整你的自学。 如果你不这样做,你很容易就会陷入困境,迷失方向,失去兴趣,得不到你想要的东西。 找到 [......]

了解详情

应用机器学习过程

应用机器学习过程

2020-04-26 机器学习

随着时间的推移,在处理应用机器学习问题时,你会开发出一种模式或流程,以快速获得良好的正常结果。 一旦开发完成,你就可以在一个又一个项目上反复使用此过程。你的流程越健壮、越发达,你就能越快地获得可靠的结果。 在这篇文章中,我想与你分享我解决机器学习问题的过程框架。 你可以将其用作下一 [......]

了解详情