RNN
一、回顾卷积
- 这种特征提取是借助卷积核实现的参数空间共享。
- 实现离散数据的分类。
然而,有些数据是与时间序列相关的,可以根据上文预测出下文,由此引出循环核。
二、 循环核
1、介绍
循环核具有记忆力,通过不同时刻的参数共享,实现了对时间序列的信息提取。
- ht:记忆体当前时刻存储的状态信息。ht-1:记忆体上一时刻存储的状态信息。xt:当前时刻的输入特征。bh,by:偏置项。
- 记忆体内存储着每个时刻的状态信息ht.
- 前向传播时,三个参数矩阵固定不变。
2、循环核按时间步展开
按循环步展开,就是把循环核按时间轴展开。
每个时刻记忆体状态信息ht被刷新,记忆体周围的参数矩阵固定不变,我们训练优化的就是这些参数矩阵。
训练完成后,完成效果最好的参数矩阵执行前向传播,输出预测结果。
3、循环神经网络
借助循环核,实现时间的特征提取,再把提取到的信息送入全连接网络。实现连续数据的预测。
4、循环计算层
三、tensorflow描述循环计算层
- 第一个送入循环核两组数据,有一个循环核,每一组有三个数 【2,1,3】
四、循环计算过程
1、输入一个字母预测下一个
- 神经网络的输入都是数字,如果预测字母,要先将其用数字表示出来。(用独热码进行编码)
- 脑中的记忆因为当前输入的信息更新了。
- 模型认为有91%的可能性输出字母c.
用RNN实现输入一个字母,预测下一个字母的One hot编码(独热码):
- 按照六步法,首先import相关模块。
- 为了送入神经网络,把字母表示成数字0-4。
- 把数字编码为独热码。
- 生成训练用的输入特征x_train 和 标签y_train.
- 输入特征a对应的标签是b,b对应的标签是c,…以此类推,e对应的标签a。
- 把它们打乱顺序。random
- 把输入特征变成RNN层期待的形状。
- 第一个维度是输入样本数,第二个维度是循环核时间展开步数,第三个维度是每个时间步输入特征的个数。(参数解释:第一个参数是整个数据集的样本数,用len(x_train)得到;第二个参数,因为输入一个字母就得到输出,所以是1;第三个参数,每个时间步输入的是字母对应的独热码,是五个数,所以是5)
- 把y_train变为numpy格式。
搭建具有三个记忆体的循环层:
-
可自行调整记忆体的个数,记忆体越多,记忆力越好。但是占用资源会更多。
-
Dense层–全连接
-
for循环,先输入执行几次预测任务。
-
等待输入一个字母。
-
把字母转化为独热码。
-
调整为rnn期望的形状。reshape 参数1,1,5解释同上。
-
通过predict预测,并选出最大的一个结果输出。
2、连续输入字母预测下一个
连续输入四个字母预测下一个:
代码: