本文基于北京大学软件与微电子学院曹健老师的Tensorflow笔记整理——b站视频教程
卷积神经网络与循环神经网络简单对比
CNN: 借助卷积核(kernel)提取特征后,送入后续网络(如全连接网络 Dense)进行分类、目标检测等操作。CNN 借助卷积核从空间维度提取信息,卷积核参数空间共享。
RNN: 借助循环核(cell)提取特征后,送入后续网络(如全连接网络 Dense)进行预测等操作。RNN 借助循环核从时间维度提取信息,循环核参数时间共享。
循环核
循环核的概念
循环核具有记忆力,通过不同时刻的参数共享,实现了对时间序列的信息提取。每个循环核有多个记忆体,对应图中的多个小圆柱。记忆体内存储着每个时刻的状态信息ℎ 𝑡 ,这里h 𝑡 = tanh(𝑥 𝑡 𝑤 𝑥ℎ +ℎ t−1w ℎℎ + 𝑏ℎ)。其中,𝑤 𝑥ℎ 、w ℎℎ为权重矩阵,𝑏ℎ为偏置,𝑥 𝑡 为当前时刻的输入特征,ℎ 𝑡−1 为记忆体上一时刻存储的状态信息,tanh 为激活函数。
当前时刻循环核的输出特征𝑦 𝑡 = softmax(ℎ 𝑡 𝑤 ℎ𝑦 + 𝑏𝑦),其中𝑤 ℎ𝑦 为权重矩阵、𝑏𝑦为偏置、softmax 为激活函数,其实就相当于一层全连接层。我们可以设定记忆体的个数从而改变记忆容量,当记忆体个数被指定、输入𝑥 𝑡 输出𝑦 𝑡 维度被指定,周围这些待训练参数的维度也就被限定了。在前向传播时,记忆体内存储的状态信息h 𝑡 在每个时刻都被刷新,而三个参数矩阵𝑤 𝑥ℎ 、w ℎℎ 、𝑤 ℎ𝑦 和两个偏置项𝑏ℎ、𝑏𝑦自始至终都固定不变。反向传播时。三个参数矩阵和两个偏置项由梯度下降法更新。
循环核按时间步展开
循环计算层 :向输出方向生长
在 RNN 中,每个循环核构成一层循环计算层,循环计算层的层数是向输出方向增长的。如图所示,左图的网络有一个循环核,构成了一层循环计算层;中图的网络有两个循环核,构成了两层循环计算层;右图的网络有三个循环核,构成了三层循环计算层。其中,三个网络中每个循环核中记忆体的个数可以根据我们的需求任意指定。
Tensorflow2 描述循环计算层
描述计算层
(3)activation:‘激活函数’(不写默认使用 tanh)
return_sequences = True
return_sequences = False
输入维度
三维张量(输入样本数, 循环核时间展开步数, 每个时间步输入特征个数)
如上图所示,左图一共要送入 RNN 层两组数据,每组数据经过一个时间步就会得到输出结果,每个时间步送入三个数值,则输入循环层的数据维度就是[2, 1, 3];
右图输入只有一组数据,分四个时间步送入循环层,每个时间步送入两个数值 ,则输入循环层的数据维度就是 [1,4, 2]。
输出维度
当 return_sequencs=True,三维张量(输入样本数, 循环核时间展开步数,本层的神经元个数);
当 return_sequencs=False,二维张量(输入样本数,本层的神经元个数)
Comments NOTHING