没有合适的资源?快使用搜索试试~ 我知道了~
深度学习算法神经网络架构_堆叠自动编码机_编程项目案例解析实例课程教程.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 182 浏览量
2023-04-10
21:49:28
上传
评论
收藏 1.98MB PDF 举报
温馨提示
试读
37页
从堆叠去噪自动编码机来看,我们首先通过逐层非监督学习方式训练独立的去噪自动编码机,可以视为神经网络自动发现问题域的特征的过程,通过自动特征提取,找到解决问题的最优特征。而堆叠去噪自动编码机的训练,可以视为已经对多层 BP 网络进行了初步训练,最后的监督学习是对网络权值的微调优化,这样可以较好地解决深度前馈网络学习收敛速度慢的问题,使其具有实用价值。
资源推荐
资源详情
资源评论
堆叠自动编码机
在上一章中,我们讨论了去噪自动编码机,并讨论了 Theano 框架实现的细节。在本章
中,我们将讨论去噪自动编码机的主要应用,即组成堆叠去噪自动编码机(SdA)。我们将
以 MNIST 手写字母识别为例,讲解怎么用堆叠去噪自动编码机来解决这一问题。
堆叠去噪自动编码机是由一系列去噪自动编码机堆叠而成的,每个去噪自动编码机的中间
层(编码层)作为下一层的输入层,这样一层一层堆叠起来构成一个深层网络,这些网络组成
堆叠去噪自动编码机的表示部分。这部分通过非监督学习,逐层进行培训,每一层均可以还原
加入随机噪声后的输入信号,而此时在每个去噪自动编码机中间层的输出信号,可以视为对原
始输入信号的某种简化表示。
当将所有去噪自动编码机堆叠形成的网络训练完成之后,首先把最后一层的中间层接
入逻辑回归网络,作为其输入层,这样就形成了一个新的多层 BP 网络,隐藏层之间的权值,
就是前面利用去噪自动编码机逐层训练时得到的连接权值矩阵。然后将这个网络视为一个
标准的 BP 网络,利用原来的 BP 网络算法进行监督学习,以达到我们希望的状态。
可能读者会有疑问,为什么不直接使用多层 BP 网络呢?其实,在 BP 网络诞生之初,
就有人基于它做具有多个隐藏层的深度网络了。但是人们很快就发现,基于误差反向传播
的 BP 网络,利用随机梯度下降算法来调整权值,但是随着层数的加深,离输出层较远的隐
藏层的权值调整量将递减,最后导致这种深度网络学习速度非常慢,直接限制了它的使用。
因此,在深度学习崛起之前,深层网络基本没有成功的应用案例。
从堆叠去噪自动编码机来看,我们首先通过逐层非监督学习方式训练独立的去噪自动
编码机,可以视为神经网络自动发现问题域的特征的过程,通过自动特征提取,找到解决
问题的最优特征。而堆叠去噪自动编码机的训练,可以视为已经对多层 BP 网络进行了初步
训练,最后的监督学习是对网络权值的微调优化,这样可以较好地解决深度前馈网络学习
收敛速度慢的问题,使其具有实用价值。
深度学习算法实践(基于
Theano
和
TensorFlow
)
-308-
9.1 堆叠去噪自动编码机
堆叠去噪自动编码机是基于去噪自动编码机构建的,所以本章有些代码与上一章相同,
但是为了代码的完整性,我们会将相关代码再列出来,使读者无须参考上一章内容也可以
很好地理解本章的内容。
我们通过定义去噪自动编码机类来实现这些功能,代码如下:
第
9
章
堆叠自动编码机
-309-
第
10
行:定义
DenosingAutoencoder
类。
第
11
行:定义
DenosingAutoencoder
类构造函数。
numpy_rng
:随机数生成引擎,用于初始化权值。
theano_rng
:
Theano
的随机数生成器。
input
:输入信号,使用去噪自动编码机时其为空,使用堆叠自动编码机时其为
Theano
变量,由下层计算结果作为输入。
n_visible
:输入层神经元个数。
W
:连接权值。
bhid
:偏移值
Bias
,单独去噪自动编码机时可忽略。
bvis
:偏移值
Bias
,单独去噪自动编码机时可忽略。
第
22
行:设置可见层神经元数量。
第
23
行:设置隐藏层神经元数量。
第
24
、
25
行:如果没有指定
Theano
随机数生成引擎,利用
theano_rng
重新生成一个。
第
26
~
35
行:如果没有指定连接权值矩阵,则用随机数进行初始化,并将其定义为
Theano
的共享变量
W
。
第
37
~
44
行:如果没有指定可见层偏移量
bvis
,则用
0
初始化。
第
46
~
54
行:如果没有指定隐藏层偏移量
bhid
,则用
0
初始化。
第
55
行:设置类属性
W
为之前定义的共享变量连接权值
W
。
第
56
行:设置类属性
b
为隐藏层偏移量
bhid
。
第
57
行:设置类属性
b_prime
为可见层偏移量
bvis
。
第
58
行:设置类属性
w_prime
为隐藏层到输出层连接权值,其值为输入层到隐藏层连
接权值的转置。
第
59
行:随机数生成引擎,设置类属性
theano_rng
。
深度学习算法实践(基于
Theano
和
TensorFlow
)
-310-
第
60
~
63
行:设置类属性
x
为输入信号,如果未指定则初始化为一个矩阵。
第
64
行:设置模型参数为连接权值、隐藏层偏移量和可见层偏移量。
第
66
~
69
行:定义获取加入噪声后输入信号的方法,调用
Theano
方法向输入信号中
加入随机噪声。
第
71
、
72
行:获取隐藏层输入值。
第
74
、
75
行:获取输出层输出值。
第
77
行:定义计算代价函数和更新参数的方法。
第
78
行:获取加入随机噪声的输入信号。
第
79
行:获取隐藏层的输出信号。
第
80
行:获取输出层的重建信号。
第
81
行:计算总的代价函数值,公式为:
x∙logx+
(
1−x
)
log
(
1−x
)
。
第
82
行:计算代价函数的平均值。
第
83
行:将代价函数对所有参数求导。
第
84
~
87
行:定义参数更新规则为
w= w − α
ℒ
。
下面我们来定义堆叠去噪自动编码机类。
根据上一节的讨论,我们在逐层训练完去噪自动编码机之后,先将其进行堆叠,形成
一个标准的多层感知器模型,再用标准
BP
算法进行微调。所以需要隐藏层和逻辑回归层来
完成这些功能。
首先来定义隐藏层
HiddenLayer
类,代码如下:
第
9
章
堆叠自动编码机
-311-
第
12
行:定义
HiddenLayer
类。
第
13
、
14
行:定义
HiddenLayer
类的构造函数。
rng
:随机数生成引擎。
input
:输入信号。
n_in
:输入信号维度。
n_out
:下一层神经元数量。
W
:上一层到本层的连接权值矩阵,默认时为空。
b
:本层神经元的偏移量,默认时为空。
activation
:激活函数,默认时为双曲正切函数。
第
15
行:设置输入信号为参数中的输入信号。
第
16
~
28
行:如果没有提供参数
W
,则以随机数初始化连接权值矩阵,将连接权值矩
阵定义为
Theano
共享变量。
第
30
~
32
行:如果没有提供参数
b
,则以
0
初始化偏移值,并将其定义为
Theano
共享
变量。
第
34
行:将连接权值赋给类属性
W
。
第
35
行:将偏移值赋给类属性
b
。
第
37
行:定义本层神经元的输入信号线性和。
第
38
~
41
行:如果没有定义激活函数,则直接输出线性和,否则应用激活函数求出输
出值。
第
43
行:定义本层参数为连接权值和偏移量
Bias
。
由于我们的微调网络是一个标准的多层感知器模型,所以需要定义一个多层感知器类
MLP
,代码如下:
剩余36页未读,继续阅读
资源评论
好知识传播者
- 粉丝: 483
- 资源: 4204
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功