如何基于Keras和Tensorflow用LSTM进行时间序列预测.doc

如何基于Keras和Tensorflow用LSTM进行时间序列预测.doc

ID:27905551

大小:825.00 KB

页数:17页

时间:2018-12-06

如何基于Keras和Tensorflow用LSTM进行时间序列预测.doc_第1页
如何基于Keras和Tensorflow用LSTM进行时间序列预测.doc_第2页
如何基于Keras和Tensorflow用LSTM进行时间序列预测.doc_第3页
如何基于Keras和Tensorflow用LSTM进行时间序列预测.doc_第4页
如何基于Keras和Tensorflow用LSTM进行时间序列预测.doc_第5页
资源描述:

《如何基于Keras和Tensorflow用LSTM进行时间序列预测.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、如何基于Keras和Tensorflow用LSTM进行时间序列预测  GitHub:github.com/jaungiers/LSTM-Neural-Network-for-Time-Series-Prediction  什么是LSTM?  自提出后,传统神经网络架构一直没法解决一些基础问题,比如解释依赖于信息和上下文的输入序列。这些信息可以是句子中的某些单词,我们能用它们预测下一个单词是什么;也可以是序列的时间信息,我们能基于时间元素分析句子的上下文。  简而言之,传统神经网络每次只会采用独立的数据向量,它没有一个类似“记忆”的概念,用来处理和“记忆”有关各种任务。  为了解决这个问题,早期

2、提出的一种方法是在网络中添加循环,得到输出值后,它的输入信息会通过循环被“继承”到输出中,这是它最后看到的输入上下文。这些网络被称为递归神经网络(RNN)。虽然RNN在一定程度上解决了上述问题,但它们还是存在相当大的缺陷,比如在处理长期依赖性问题时容易出现梯度消失。  这里我们不深入探讨RNN的缺陷,我们只需知道,既然RNN这么容易梯度消失,那么它就不适合大多数现实问题。在这个基础上,Hochreiter&Schmidhuber于1997年提出了长期短期记忆网络(LSTM),这是一种特殊的RNN,它能使神经元在其管道中保持上下文记忆,同时又解决了梯度消失问题。具体工作原理可读《一文详解LSTM

3、网络》。    上图是LSTM的一个典型内部示意图,它由若干节点和若干操作组成。其中,操作充当输入门、输出门和遗忘门,为节点状态提供信息。而节点状态负责在网络中记录长期记忆和上下文。  一个简单的正弦曲线示例  为了演示LSTM在预测时间序列中的作用,我们先从最基础的开始:一个时间序列——标准正弦曲线。  代码数据文件夹中提供的数据包含我们创建的sinewave.csv文件,该文件包含5001个正弦曲线时间段,幅度和频率为1(角频率为6.28),时间差为0.01。它的图像如下所示:    正弦曲线数据集  有了数据,接下来就是实现目标。在这个任务中,我们希望LSTM能根据提供的数据学习正弦曲线

4、,并预测此后的N步,持续输出曲线。  为了做到这一点,我们需要先对CSV文件中的数据进行转换,把处理后的数据加载到pandas的数据框架中。之后,它会输出numpy数组,馈送进LSTM。Keras的LSTM一般输入(N,W,F)三维numpy数组,其中N表示训练数据中的序列数,W表示序列长度,F表示每个序列的特征数。  在这个例子中,我们使用的序列长度是50(读取窗口大小),这意味着网络能在每个序列中都观察到完整的正弦曲线形状,便于学习。  序列本身是滑动窗口,因此如果我们每次只移动1,所得图像其实和先前的图像是完全一样的。下面是我们在示例中截取的窗口图像:    为了加载这些数据,我们在代码

5、中创建了一个DataLoader类。你可能会注意到,在初始化DataLoader对象时,会传入文件名、传入确定用于训练与测试的数据百分比的拆分变量,以及允许选择一列或多列数据的列变量用于单维或多维分析。    当我们有一个允许加载数据的数据对象之后,就是时候准备构建深层神经网络模型了。我们的代码框架利用模型类型和config.json文件,再加上存储在配置文件中的架构和超参数,可以轻松构建出模型。其中执行构建命令的主要函数是build_model(),它负责接收解析的配置文件。  这个函数的代码如下所示,它可以轻松扩展,以便用于更复杂的架构。    加载数据并建立模型后,现在我们可以用训练数据

6、训练模型。如下代码所示,我们创建了一个单独的运行模块,它会利用我们的模型和DataLoader一起训练,输出预测结果和可视化。    对于输出,我们会进行两种类型的预测:一是逐点预测,即先让模型预测单个点的值,在图中绘出位置,然后移动滑动窗口,用完整的测试数据预测下个点的值。二是预测一个完整序列,即只用训练数据的第一部分初始化一次训练窗口,然后就像逐点预测一样,不断移动滑动窗口并预测下一个点。  和第一种做法不同的是,第二种做法是在用预测所得的数据进行预测,即在第二次预测时,模型所用数据中有一个数据点(最后一个点)来自之前的预测;第三次预测时,数据中就有两个点来自之前的预测……以此类推,到第5

7、0次预测时,测试集里的数据已经完全是预测的数据。这意味着模型可预测的时间序列被大大延长。      逐点预测结果    完整序列预测结果  作为参考,你可以在下面的配置文件中看到用于正弦曲线示例的网络架构和超参数。    我们可以从上面两幅图中发现,如果用第二种方法进行预测,随着测试集中被不断加入新的预测数据点,模型的性能会渐渐下降,预测结果和真实结果的误差越来越大。但正弦函数是一个非常简单的零噪

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。