zoukankan      html  css  js  c++  java
  • DBN程序剖析

    最近学习深度学习,学习时间半月不到,很多程序似懂非懂,用的又是不太明白的python。不过不怕。什么也难不倒无产阶级,自己剖析下,不指望指点别人,只希望高人能指点。

    主函数大体可以分为 建立DBN网络,预训练模型和微调模型三部分。

    1.建立DBN网络

    由class DBN(object)的__init__函数来完成,思路是由前面的隐含层生成后面的隐含层,并生成与每一个隐含层对应的RBM层

    2.预训练模型

    首先获得预训练函数,由class DBN(object)的pretraining_functions函数来完成,训练的对象是RBM层.里面的核心语句为

     cost, updates = rbm.get_cost_updates(learning_rate,persistent=None, k=k)

     fn = theano.function(inputs=[index,theano.Param(learning_rate, default=0.1)], outputs=cost,updates=updates,givens={self.x:train_set_x[batch_begin:batch_end]})

    第二句的输出是cost和updates ,要看清他们的结构还得从第一句的RBM的get_cost_updates函数来看。

    get_cost_updates是执行一步CD/PCD运算。

    程序首先建立一个类class DBN(object),里面包含3个函数:

    1. def __init__(self, numpy_rng, theano_rng=None, n_ins=784,  hidden_layers_sizes=[500, 500], n_outs=10):

    self.n_layers = len(hidden_layers_sizes) 结果为2,表示2层

    if not theano_rng:
                theano_rng = RandomStreams(numpy_rng.randint(2 ** 30))

    theano_rng说是随机产生器,不知道做什么用,往下看。

    self.x = T.matrix('x')  # the data is presented as rasterized images 数据是光栅化的图像,是不是可以理解为采样的图像
    self.y = T.ivector('y')  # the labels are presented as 1D vector
                                     # of [int] labels

    下面的代码对于每一层进行扫描

      for i in xrange(self.n_layers):
                指定输入大小:第一层的时候输入是图像,否则就是对应隐含层
               指定输入层。

             根据  输入和输出层大小、输入图像 就可以求出隐含层

             根据隐含层可以求出RBM层
              

  • 相关阅读:
    数据结构学习(十二)、归并排序
    数据结构学习(十一)、堆排序
    数据结构学习(十)、插入排序
    数据结构学习(九)、简单选择排序
    数据结构学习(八)、冒泡排序
    天梯赛 L3-013 非常弹的球 找规律
    codeup模拟赛 进击的二叉查找数
    POJ 2828 Buy Tickets 线段树 倒序插入 节点空位预留(思路巧妙)
    HDU 1394 逆序数 线段树单点跟新 | 暴力
    HDU 2795 Billboard 线段树,区间最大值,单点更新
  • 原文地址:https://www.cnblogs.com/Iknowyou/p/3656153.html
Copyright © 2011-2022 走看看