利用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循环神经网络的主要内容,如果未能解决你的问题,请参考以下文章
python tensorflow 2.0 不使用 Keras 搭建简单的 LSTM 网络
实例 :教你使用简单神经网络和LSTM进行时间序列预测(附代码)