没有合适的资源?快使用搜索试试~ 我知道了~
Tensorflow笔记61
需积分: 0 0 下载量 171 浏览量
2022-08-04
12:29:08
上传
评论
收藏 3.65MB PDF 举报
温馨提示
试读
28页
(1)神经元个数:即循环核中记忆体的个数 (2) return_sequences:在输出序列中,返回最后时间步的输出值还是返 (3)输入维度:三维张量(输入样
资源详情
资源评论
资源推荐
人工智能实践:TensorFlow 笔记
第六讲
循环神经网络
本节目标:学习循环神经网络,用 RNN、LSTM、GRU 实现连续数据的预测(以
股票预测为例)。
一,循环神经网络(Recurrent Neural Network,RNN)
1,卷积神经网络与循环神经网络简单对比
CNN: 借助卷积核(kernel)提取特征后,送入后续网络(如全连接网络 Dense)
进行分类、目标检测等操作。CNN 借助卷积核从空间维度提取信息,卷积核参数
空间共享。
RNN: 借助循环核(cell)提取特征后,送入后续网络(如全连接网络 Dense)
进行预测等操作。RNN 借助循环核从时间维度提取信息,循环核参数时间共享。
2,详解 RNN
·循环核
图 1.2.1 RNN 循环核
循环核具有记忆力,通过不同时刻的参数共享,实现了对时间序列的信息提
取。每个循环核有多个记忆体,对应图 1.2.1 中的多个小圆柱。记忆体内存储着
每个时刻的状态信息
,这里h
= tanh(
+
w
+ )。其中,
、w
为权重矩阵,为偏置,
为当前时刻的输入特征,
为记忆体上一时刻存储
的状态信息,tanh 为激活函数。
当前时刻循环核的输出特征
= softmax(
+ ),其中
为权重矩阵、
为偏置、softmax 为激活函数,其实就相当于一层全连接层。我们可以设定记
忆体的个数从而改变记忆容量,当记忆体个数被指定、输入
输出
维度被指定,
周围这些待训练参数的维度也就被限定了。在前向传播时,记忆体内存储的状态
信息h
在每个时刻都被刷新,而三个参数矩阵
、w
、
和两个偏置项、
自始至终都是固定不变的。在反向传播时,三个参数矩阵和两个偏置项由梯度
下降法更新。
·循环核按时间步展开
将循环核按时间步展开,就是把循环核按照时间轴方向展开,可以得到如图
1.2.2 的形式。每个时刻记忆体状态信息h
被刷新,记忆体周围的参数矩阵和两
个偏置项是固定不变的,我们训练优化的就是这些参数矩阵。训练完成后,使用
效果最好的参数矩阵执行前向传播,然后输出预测结果。其实这和我们人类的预
测是一致的:我 们 脑中的记忆体每个时刻都根据当前的输入而更新;当前的预测
推理是根据我们以往的知识积累用固化下来的“参数矩阵”进行的推理判断。
可以看出,循环神经网络就是借助循环核实现时间特征提取后把提取到的信
息送入全连接网络,从而实现连续数据的预测。
图 1.2.2 RNN 循环核按时间步展开
·循环计算层:向输出方向生长
在 RNN 中,每个循环核构成一层循环计算层,循环计算层的层数是向输出方
向增长的。如 图 1.2.3 所示,左图的网络有一个循环核,构成了一层循环计算层;
中图的网络有两个循环核,构成了两层循环计算层;右图的网络有三个循环核,
构成了三层循环计算层。其中,三个网络中每个循环核中记忆体的个数可以根据
我们的需求任意指定。
图 1.2.3 循环计算层
·RNN 训练
得到 RNN 的前向传播结果之后,和其他神经网络类似,我们会定义损失函数,
使用反向传播梯度下降算法训练模型。RNN 唯一的区别在于:由于它每个时刻的
节点都可能有一个输出,所以 RNN 的总损失为所有时刻(或部分时刻)上的损失
和。
·Tensorflow2 描述循环计算层
tf.keras.layers.SimpleRNN(神经元个数,activation=‘ 激活函数’,
return_sequences=是否每个时刻输出
到下一层)
(1)神经元个数:即循环核中记忆体的个数
(2) return_sequences:在输出序列中,返回最后时间步的输出值
还是返
回全部时间步的输出。False 返回最后时刻(图 1.2.5),True 返回全部时刻(图
1.2.4)。当下一层依然是 RNN 层,通常为 True,反之如果后面是 Dense 层,通
常为 Fasle。
图 1.2.4 return_sequences = True
图 1.2.5 return_sequences = False
(3)输入维度:三维张量(输入样本数, 循环核时间展开步数, 每个时间步输
入特征个数)。
如图 1.2.6 所示,左图一共要送入 RNN 层两组数据,每组数据经过一个时间
步就会得到输出结果,每个时间步送入三个数值,则 输入循环层的数据维度就是
图 1.2.6 RNN 层输入维度
[2, 1, 3];右图输入只有一组数据,分四个时间步送入循环层,每个时间步送
入两个数值 ,则输入循环层的数据维度就是 [1,4, 2]。
(4)输出维度:当 return_sequenc=True,三维张量(输入样本数, 循环核时
间展开步数,本层的神经元个数);当 return_sequenc=False,二维张量(输入样
本数,本层的神经元个数)
(5) activation:‘激活函数’(不写默认使用 tanh)
例:SimpleRNN(3, return_sequences=True),定义了一个具有三个记忆体的
循环核,这个循环核会在每个时间步输出
。
·循环计算过程之 1pre1
RNN 最典型的应用就是利用历史数据预测下一时刻将发生什么,即根据以前
见过的历史规律做预测。举一个简单的字母预测例子体会一下循环网络的计算过
程:输入一个字母预测下一个字母---输入 a 预测出 b、输入 b 预测出 c、输入 c
预测出 d、输入 d 预测出 e、输入 e 预测出 a。计算机不认识字母,只能处理数
字。所以需要我们对字母进行编码。这里假设使用独热编码(实际中可使用其他
编码方式),编码结果如图 1.2.7 所示。
图 1.2.7 字母独热编码
假设使用一层 RNN 网络,记忆体的个数选取 3,则字母预测的网络如图 1.2.8
所示。假设输入字母 b,即输入
为[0,1,0,0,0],这时上一时刻的记忆体状态信
息
为 0 。 由上文理论知识不难得到:h
= tanh(
+
w
+ ) =
tanh
([
2.3 0.8 1.1
]
+ 0 +
[
0.5 0.3 0.2
])
=
tanh[1.8 1.1 0.9 ] = [0.9 0.8 0.7] ,这个过程可以理解为脑中的记
忆因为当前输入的事物而更新了。
输出y
是把提取到的时间信息通过全连接进行识别预测的过程,是整个网络的输
出层。不难知道,y
= softmax(
+ ) = 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]) =
剩余27页未读,继续阅读
吹狗螺的简柏承
- 粉丝: 14
- 资源: 313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0