DBN程序剖析_updated

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.预训练模型

获得预训练的函数

原文地址:https://www.cnblogs.com/Iknowyou/p/3657383.html