DBN运用CD算法逐层进行训练,得到每一层的参数Wi和ci用于初始化DBN,之后再用监督学习算法对参数进行微调。本例中采用softmax分类器(下一篇随笔中)作为监督学习算法。

RBM与上一篇随笔中一致,通过多层RBM将softmax parameter从 (10L, 784L)降低到(10L, 50L)。单独用softmax分类器也可以得到相近(或者略好)的正确率,所需的时间略长一点。

 from rbm2 import RBM
from softmax import SoftMax
import os
import numpy as np
import cPickle class DBN:
def __init__(self,nlayers,ntype,vlen,hlen):
self.rbm_layers = []
self.nlayers = nlayers
self.ntype = ntype
self.vlen=vlen
self.hlen=hlen def calcRBMForward(self,x):
for rbm in self.rbm_layers:
x = rbm.forward(x.T)
return x def load_param(self,dbnpath,softmaxpath):
weights = cPickle.load(open(dbnpath,'rb'))
self.nlayers = len(weights)
for i in range(self.nlayers):
weight = weights[i]
v,h= np.shape(weight)
rbm = RBM(v,h)
rbm.w = weight
self.rbm_layers.append(rbm)
print "RBM layer%d shape:%s" %(i,str(rbm.w.shape))
self.softmax = SoftMax()
self.softmax.load_theta(softmaxpath)
print "softmax parameter: "+str(self.softmax.theta.shape) def pretrainRBM(self,trainset):
weights = []
for i in range(self.nlayers):
rbm = RBM(self.vlen,self.hlen)
if i == 0:
traindata = trainset
else:
traindata = np.array(outdata.T)
rbm.rbmBB(traindata)
outdata = np.mat(rbm.forward(traindata))
self.rbm_layers.append(rbm)
weights.append(rbm.w)
self.vlen = self.hlen
self.hlen = self.hlen/2
f= open("data/dbn.pkl",'wb')
cPickle.dump(weights,f)
f.close() def fineTune(self,trainset,labelset):
rbm_output = self.calcRBMForward(trainset)
MAXT,step,landa = 100,1,0.01
self.softmax = SoftMax(MAXT,step,landa)
self.softmax.process_train(rbm_output,labelset,self.ntype) def predict(self,x):
rbm_output = self.calcRBMForward(x)
return self.softmax.predict(rbm_output) def validate(self,testset,labelset):
testnum = len(testset)
correctnum = 0
for i in range(testnum):
x = testset[i]
testtype = self.predict(x)
orgtype = labelset[i]
if testtype == orgtype:
correctnum += 1
rate = float(correctnum)/testnum
print "correctnum = %d, sumnum = %d" %(correctnum,testnum)
print "Accuracy:%.2f" %(rate)
return rate dbn = DBN(3,10,784,200)
f = open('mnist.pkl', 'rb')
training_data, validation_data, test_data = cPickle.load(f)
training_inputs = [np.reshape(x, 784) for x in training_data[0]]
data = np.array(training_inputs[:5000]).T
training_inputs = [np.reshape(x, 784) for x in validation_data[0]]
vdata = np.array(training_inputs[:5000])
if not os.path.exists('data/softmax.pkl'): # Run twice
dbn.pretrainRBM(data)
dbn.fineTune(data.T,training_data[1][:5000])
else:
dbn.load_param("data/dbn.pkl","data/softmax.pkl")
dbn.validate(vdata,validation_data[1][:5000]) #RBM layer0 shape:(784L, 200L)
#RBM layer1 shape:(200L, 100L)
#RBM layer2 shape:(100L, 50L)
#softmax parameter: (10L, 50L)
#correctnum = 4357, sumnum = 5000
#Accuracy:0.87

DBN(深度信念网络)的更多相关文章

  1. 机器学习——DBN深度信念网络详解(转)

    深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功.本人在多年之前也曾接触过神经网络.本系列文章主要记录自己对深度神经网络的一些学习心得. 简要描述深度神经网络模型. 1.  自联想神经网络 ...

  2. 深度学习(二)--深度信念网络(DBN)

    深度学习(二)--深度信念网络(Deep Belief Network,DBN) 一.受限玻尔兹曼机(Restricted Boltzmann Machine,RBM) 在介绍深度信念网络之前需要先了 ...

  3. 受限玻尔兹曼机(RBM, Restricted Boltzmann machines)和深度信念网络(DBN, Deep Belief Networks)

    受限玻尔兹曼机对于当今的非监督学习有一定的启发意义. 深度信念网络(DBN, Deep Belief Networks)于2006年由Geoffery Hinton提出.

  4. Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.3

    Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.3 http://blog.csdn.net/sunbow0 第二章Deep ...

  5. Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.1

    Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.1 http://blog.csdn.net/sunbow0 Spark ML ...

  6. Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2

    Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2 http://blog.csdn.net/sunbow0 第二章Deep ...

  7. 理论优美的深度信念网络--Hinton北大最新演讲

    什么是深度信念网络 深度信念网络是第一批成功应用深度架构训练的非卷积模型之一. 在引入深度信念网络之前,研究社区通常认为深度模型太难优化,还不如使用易于优化的浅层ML模型.2006年,Hinton等研 ...

  8. 八.DBN深度置信网络

    BP神经网络是1968年由Rumelhart和Mcclelland为首的科学家提出的概念,是一种按照误差反向传播算法进行训练的多层前馈神经网络,是目前应用比较广泛的一种神经网络结构.BP网络神经网络由 ...

  9. RBM(受限玻尔兹曼机)和深层信念网络(Deep Brief Network)

    目录: 一.RBM 二.Deep Brief Network 三.Deep Autoencoder 一.RBM 1.定义[无监督学习] RBM记住三个要诀:1)两层结构图,可视层和隐藏层:[没输出层] ...

随机推荐

  1. 有关WAMPSERVER 环境搭建 如何修改端口,MySQL数据库的修改

    环境搭建 http://share.weiyun.com/88896747fedd4e8b19afebea18f7684c 一.修改Apache的监听端口 1.在界面中选Apache,弹出隐藏菜单选项 ...

  2. Python清理内存中的密码

    基本不太好搞.可以参考如下讨论: http://stackoverflow.com/questions/728164/securely-erasing-password-in-memory-pytho ...

  3. vc设置按钮文字颜色

    设置按钮文字颜色使用 CMFCBUTTON即可 在OnInitDialog函数加入如下内容即可 ((CMFCButton*)GetDlgItem(IDC_MFCBUTTON1))->SetTex ...

  4. Ogre中TerrainSceneManager

    转自:http://blog.csdn.net/yanonsoftware/article/details/1103665 TerrainSceneManager是一个OctreeSceneManag ...

  5. 层次分析模型(AHP)及其MATLAB实现

    今天用将近一天的时间学习了层次分析模型(AHP),主要参考了一份pdf,这个网站,和暨南大学章老师的课件,现写出一些自己总结的要点. 一.层次分析法的基本步骤: 角度一: 实际问题——分解——> ...

  6. IOS 动画的各种实现方法

    #import "ViewController.h"#import <QuartzCore/QuartzCore.h> @interface ViewControlle ...

  7. [转]A plain english introduction to cap theorem

    Kaushik Sathupadi Programmer. Creator. Co-Founder. Dad. See all my projects and blogs → A plain engl ...

  8. Smart210学习-----lcd驱动

    帧缓冲设备 1.1帧缓冲设备:帧缓冲(framebuffer)是 Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行 ...

  9. window.opener调用父窗体方法的用法

    应用实例:        function BindWindowCloss() {            $(window).bind('beforeunload', function () {    ...

  10. SqlSever2005 一千万条以上记录分页数据库优化经验总结

    http://www.cnblogs.com/jirigala/archive/2010/11/03/1868011.html 待测试???