利用Keras搭建LSTM循环神经网络

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Keras搭建LSTM循环神经网络相关的知识,希望对你有一定的参考价值。

参考技术A 一般的前馈网络就是:输入->处理->输出,但是对于序列或者依赖于时间的信号,比如音乐,视频,传感器数据等,就不是很适用。循环神经网络能把整个序列的行为在模型内建模出来。最初的循环神经网络模型在1970到1980年提出来的,简单的循环神经网络或者叫Elamn network是由Jeff Elman在1990年于 Finding Structure in Time 中提出来的。

当前时刻的输入乘以权重之后,加上额外的来自上一个时间的隐藏状态(hidden state),得到当前时刻的输出以及传向下一个时刻的隐藏状态。循环的圈的意思就是,用现在和不久之前的信息得到现在的输出。展开之后的每一个单元都有着相同的权重(其实就是同一个)。
那么隐藏状态是怎么计算的,输入和隐藏状态又是怎么得到输出的?

隐藏状态:
输出:

序列之间的关系有:一对一(图片分类),一对多(图片说明),多对一(语义分析),多对多(视频分类)。

深度RNN多个单元叠加在一起,在每个时间上可以有更深层的网络。

参考:
[1] https://stackoverflow.com/questions/43034960/many-to-one-and-many-to-many-lstm-examples-in-keras

[2] How to Scale Data for Long Short-Term Memory Networks in Python

Keras中的LSTM

参考技术A 最近做一个关于用电负荷预测的项目,想用循环神经网络试一下,具有时间特性的数据预测当然非LSTM莫属了啦,但是感觉自己对LSTM的输入和输出不是很明白,就学习顺便整理一下吧。

说到LSTM当然先来一张cell的图了:

使用LSTM搭建多层LSTM网络还是比较方便的,我们只需要使用 Sequential() 进行堆叠即可。
在进行多层LSTM网络时,需要注意一下几点:

参数 lstm_layers=5 , dense_layers=3 ,结果如下:

前面提到了LSTM的计算其实和普通神经网络类似,那我们就来推一下参数量,看是否符合我们的预期。

最终,总共的参数值为 112+16=128 。和程序打印出来的结果一致。
通过上面的推导我们发现,其实实际的参数量和步长是没有关系的,这一点我也验证了一下,通过改变输入 shape=(samples, time_steps, input_dim) 中的 time_stpes 的值,参数量不会发生变化。如下(输入 shape=[N, 2, 3] , time_steps=10 ):

以上是关于利用Keras搭建LSTM循环神经网络的主要内容,如果未能解决你的问题,请参考以下文章

教你搭建多变量时间序列预测模型LSTM(附代码数据集)

Keras之RNN和LSTM

python tensorflow 2.0 不使用 Keras 搭建简单的 LSTM 网络

实例 :教你使用简单神经网络和LSTM进行时间序列预测(附代码)

Keras深度学习实战——使用长短时记忆网络构建情感分析模型

第六讲 循环神经网络--LSTM--stock