在时间t的时候,对于单个神经元来讲它的输出y(t)如下
wx是对于输入x的权重,wy是对于上一时刻输出的权重
所以循环神经网络有两个权重。
如果有很多这样的神经元并排在一起
?则在t时刻的输出y为
这时输入输出都是向量
由于循环神经网络的输入与上个时间有关,因此可以认为RNN具有记忆功能。但是RNN在最开始出现的时候,并没有很好的记忆能力,在keras中存在三种RNN,SimpleRNN,GRU,LSTM,其中SimpleRNN就存在深度学习中梯度消失的问,为了解决这个问题,出现了LSTM.
对于RNN,输入序列是按照[批量大小,时间步长,特征维度]输入,是一个三维矩阵。但是也可能是二维矩阵。下面分开讲解输入输出的类型
第一种:输入是三维矩阵,输出三维矩阵;
这种输入输出一般叫做序列到序列
我有32种类型的彩票,每一种彩票有100天的号码,每个号码的长度是7位数,那么把这个数据如数到RNN,输入的维度就是[32,100,,7]。
输出时第2到:101天的32种彩票的7位数号码,那么它的维度可以是[32,100,7]
第二种:输入是三维矩阵,输出是二维矩阵;
这种输入输出模式叫做
比如,我们可能只关心101天的结果,那么他就是[32,7]
第三种,输入时二维矩阵,输出是三维矩阵
这种是向量到序列的输入输出模式,但是一般来讲,输入也是一个三维矩阵
在每一个时间步长输入相同的输入向量,输出一个序列。
第四种:编码器解码器模式
这种模式就跟RNN的语言翻译一样,编码器把序列编码为向量,解码器把向量解码为序列。
在tensorflow种输入一般都是三维矩阵,如果你的数据是二维[m,n],则将其升高一个维度就可以了,变成[m,n,1]
个人电脑很难运行起RNN,十分损耗资源。
tensorflow提供了如下几个RNN
(1).SimpleRNN
(2).GRU
(3).LSTM
其中第一个和第二个用的比较少,这是因为普通的RNN梯度不稳定,而且记忆能力十分有限,因此推出了LSTM,GRU时LSTM的简化版,计算效率高,性能虽然比不上LSTM,但是性能还不错。
关于lstm的结构不是本文的研究重点。
创建一个循环神经网络
lstm_1 = keras.layers.LSTM(100, reture_sequence=True)(last_output)
输入是上一层的输出,这里要求last_output的维度是三维
100个节点
returen_sequence:代表是否返回时间序列,如果你只关系之后一个时间,就可以选择False
如果你想写深度循环神经网络,那么就需要选择True
选择True输出就有三维,选择false输出则只有两个维度。
关于RNN的细节之后再补充,RNN的运用也是。