描述循环计算层
tf.keras.layers.SimpleRNN(记忆体个数,activation=‘激活函数’, return_sequences=是否每个时刻输出ht到下一层)
activation=‘激活函数’(不写,默认使用tanh)
return_sequences=Ture 各时间步输出ht(一般中间层的核用Ture)
return_sequences=False 仅最后时间步输出ht(默认)(一般最后一层的循环核用False,仅在最后一个时间步输出ht)
当return_sequences=Ture
循环核在每个时间步均输出ht,即循环核各时刻会把ht推送到下一层
当return_sequences=False
循环核仅在最后一个时间步输出ht,即循环核仅在最后一个时刻把ht推送到下一层
API对送入循环层的数据维度是有要求的
要求送入循环层的数据是三维的
三维:[送入样本数,循环核时间展开步数,每个时间步输入特征个数]
示例一:
一共要输入RNN层两组数据,每组数据经过一个时间步就会得到输出结果,每个时间步送入三个数值
故需要输入循环层的数据维度就是[2, 1, 3]
示例二:
只有一组数据,分四个时间步送入循环层,每个时间步送入两个数值
故输入循环层的数据维度就是[1, 4, 2]
循环计算过程![](https://i-blog.csdnimg.cn/blog_migrate/691f764b5511e2c565f4e5c6f250bf84.jpeg)
用字母预测例子理解循环计算过程(即输入a输出b,输入b输出c)
- 送入神经网络的都是数字,所以先用独热码把五个字母表示出来
- 随机生成Wxh、Whh、Why三个参数矩阵
- 记忆体的个数选取3
- 记忆体状态信息ht=tanh(xtWxh+ht-1Whh+bh)
- 令当前输入xt为[0, 1, 0, 0, 0],乘以矩阵Wxh
- 得ht=tanh(xtWxh+ht-1Whh+bh)=tanh([-2.3 0.8 1.1]+[0 0 0]*Whh+[0.5 0.3 -0.2])=tanh[-1.8 1.1 0.9]
- 记忆体存储的状态信息被刷新为ht=[-0.9 0.8 0.7]
- 输出yt是把提取到的时间信息通过全连接进行识别预测的过程,是整个网络的输出层
- 输出yt=softmax(ht*Why+by)=softmax([-0.7 -0.6 2.9 0.7 -0.8]+[0.0 0.1 0.4 -0.7 0.1])=softmax([-0.7 -0.5 3.3 0.0 -0.7])=[0.02 0.02 0.91 0.03 0.02]
- 模型认为有91%的可能性输出字母c,所以循环网络输出了预测结果c