深度学习之RNN

1.循环神经网络

在时间t的时候,对于单个神经元来讲它的输出y(t)如下

y(t)=F(\omega_x *x(t) +\omega_y * y(t-1))

深度学习之RNN_第1张图片

wx是对于输入x的权重,wy是对于上一时刻输出的权重

所以循环神经网络有两个权重。

如果有很多这样的神经元并排在一起

深度学习之RNN_第2张图片

 则在t时刻的输出y为

y(t)=\varnothing (\omega_x*x(t)+\omega_y*y(t-1)+b )

这时输入输出都是向量

2.记忆单元

由于循环神经网络的输入与上个时间有关,因此可以认为RNN具有记忆功能。但是RNN在最开始出现的时候,并没有很好的记忆能力,在keras中存在三种RNN,SimpleRNN,GRU,LSTM,其中SimpleRNN就存在深度学习中梯度消失的问,为了解决这个问题,出现了LSTM.

3.输入输出的序列

对于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]

4.创建一个RNN网络

个人电脑很难运行起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的运用也是。

你可能感兴趣的:(深度学习,rnn,人工智能)