1.类DBN
1. __init__
创建类对象。
DBN是一个多层感知器,它的每个中间层都分别和一个RBM共享权重。我们
- 首先把DBN建造成一个深度多层感知器(MLP)。在建每一MLP层的时候,同时构建和它相同权重的RBM层。
- 然后对这些RBM层进行训练。由于和MLP层权重是同一个,意味着MLP的权重改变。
- 最后进行微调。通过对MLP进行随机梯度下降来完成
按照上面思路,对于结构中的每一层,进行下面操作。
- 计算sigmoid层。输入:输入,输入维数,输出维数,和激活函数
- 计算RBM层。输入:输入,输入维数,输出维数,sigmoid层的W和b参数。
然后再在MLP的顶层加上一个逻辑层
2.pretraining_functions
生成函数的列表,可以在给定层上实施一步梯度下降。
对于每一个RBM层,进行下面的操作:
- 计算cost和updates的列表。
- 得到theano函数。输入:cost和updates。
- 计算微调阶段的损失。定义为逻辑回归层(输出层)的负对数似然。
- 计算在self.x和self.y上的错误数量。
3.build_finetune_functions
产生3个函数:
a.函数train。进行一步微调。
b.函数validate。从认证集中选取一批数据计算误差。
c.函数test。从测试集中选取一批数据计算误差。
具体过程如下:
根据模型参数计算梯度
计算微调更新。
2.类test_DBN
展示如何训练和测试一个DBN网络
1.加载数据并构建DBN
2.预训练模型
获得预训练的函数