LSTM模型分析及对时序数据预测的具体实现(python实现)
来源:互联网 发布:淘宝快速批量上传宝贝 编辑:程序博客网 时间:2024/06/05 13:22
具体代码看代码云:传送门,有问题欢迎随时私信~
引言
这篇博客衔接上一篇博客: Holt-Winters模型原理分析及代码实现(python),我们在三次指数平滑的基础上,来进一步讨论下对时序数据的预测。
LSTM原理分析(参考博文:Understanding LSTM Networks)
Long Short Term 网络–LSTM,是神经网络的一种简单延伸,也是一种特殊的RNN模型。可以用来学习长期依赖的信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。LSTM在语言模型,图像捕捉等领域有着极其广泛的应用。
所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。如下图所示:
LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。如下图所示:
那么我们可以知道LSTM实现长期记忆的必要条件如下:
增加遗忘机制。例如当一个场景结束是,模型应该重置场景的相关信息,例如位置、时间等。而一个角色死亡,模型也应该记住这一点。所以,我们希望模型学会一个独立的忘记/记忆机制,当有新的输入时,模型应该知道哪些信息应该丢掉。
如下图所示:
增加保存机制。当模型看到一副新图的时候,需要学会其中是否有值得使用和保存的信息。
如下图所示:
所以当有一个新的输入时,模型首先忘掉哪些用不上的长期记忆信息,然后学习新输入有什么值得使用的信息,然后存入长期记忆中。
如下图所示:
把长期记忆聚焦到工作记忆中。最后,模型需要学会长期记忆的哪些部分立即能派上用场。不要一直使用完整的长期记忆,而要知道哪些部分是重点。
如下图所示:
python实现
环境
Python 3.6
TensorFlow
Numpy
Keras
Matplotlib
构造数据
构造一个-50~50步长为1,大小为sinx的数据序列,代码如下图所示:
x = np.arange(-50.0, 50.0, 1)y1 = np.sin(x)y1 = np.array(y1)plt.plot(x, y1,'ko--')plt.show()
如下图所示:
构造lstm需要的数据格式
Keras LSTM层的工作方式是通过接收3维(N,W,F)的数字阵列,其中N是训练序列的数目,W是序列长度,F是每个序列的特征数目。我使用了[1,5,20,1]的网络结构,其中我们有1个输入层(由大小为50的序列组成),该输入层喂食5个神经元给LSTM层,接着该LSTM层喂食20个神经元给另一个LSTM层,然后使用一个线性激活函数来喂食一个完全连接的正常层以用于下一个时间步的预测。
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1)) ...model = lstm.build_model([1, 5, 20, 1])model.fit( x_train, y_train, batch_size=512, nb_epoch=epochs, validation_split=0.05)
预测及结果
predicted = lstm.predict_point_by_point(model, x_test)plot_results(predicted, y_test)
如下图所示:
- LSTM模型分析及对时序数据预测的具体实现(python实现)
- LSTM模型分析及对时序数据预测的具体实现(python实现)
- Python中利用LSTM模型进行时间序列预测分析
- Tensorflow lstm实现的小说撰写预测
- LSTM模型简介及Tensorflow实现
- python 实现 简单的 lstm
- LSTM结构分析及代码实现
- TensorFlow实现基于LSTM的语言模型
- 对良/恶性肿瘤的预测python代码实现
- python 时序数据分析
- tensorflow LSTM实现sin(x)预测
- 深度学习之六,基于RNN(GRU,LSTM)的语言模型分析与theano代码实现
- 86、使用Tensorflow实现,LSTM的时间序列预测,预测正弦函数
- RNN及LSTM的matlab实现
- 天池大数据竞赛口碑商家客流量预测——时序预测(python-numpy-arima)
- Python中用Keras构建LSTM模型进行时间序列预测
- ODM和OLAP实现时序预测(一)
- ODM和OLAP实现时序预测(二)
- Spring事务管理讲解
- c++知识点
- 动态代理
- OpenStack Pike 版本中的 55 个新功能盘点
- myeclipse提示Failed to create the part's controls
- LSTM模型分析及对时序数据预测的具体实现(python实现)
- Android发现局域网IP
- SpringBoot Log4j2日志分级输出
- 整合微服务的简单定义
- Hadoop快速入门
- Charles从入门到精通
- windows配置SDL出现无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
- unity学习笔记#4--读取XML数据用于人物间对话
- 注册soe莫名失败