深度信任网络DBN的一个matlab实例

关于深度学习的一些个人浅见:

深度学习通常是训练深度(多层)神经网络,用于模式识别(如语音、图像识别);深度网络 指是具有深层(多层)网络结构的神经网络。

深层网络由于神经元多,参数多,拟合表现能力强,有表现欲解决复杂问题的能力。

但是深度网络存在很多局部最优解,深度网络的训练容易停留在局部最优上,初始参数的选择对网络最终收敛在那个位置有很大的影响。

采用限制玻尔兹曼机RBM对深度网络做逐层无监督训练,将各单层训练得到的参数作为深度网络各层神经元的初始参数,该参数是深度网络参数空间的一个较好位置(容易)。

RBM逐层训练出深度网络参数初值后,在用传统的BP算法对深度网络进行训练,如此,深度网络的参数最终将收敛在一个好的位置。

RBM通过迭代大量数据的无监督训练,把能够提炼出训练数据的较本质的特征,这被认为是好的初始参数。

本例子为matlab编写,为用数字识别训练一个手写数字识别的深度神经网络。

另外需要DBN的支持代码,可以从这里下载:http://download.csdn.net/detail/hzq20081121107/7857735,http://pan.baidu.com/s/1c0fBQsK

网络结构采用 784,400,200,100,50,20,10的网络结构。

function aGetDeepNet()
clc
clear all
%得到训练数据
load('adata.mat','train_digitdata','train_targets');
X = train_digitdata;
Y = train_targets;
%输入数据初始化
Xmin = min(X);
Xmax = max(X);
X = bsxfun(@rdivide,bsxfun(@minus,X,Xmin),(Xmax-Xmin));

%RBM训练得到第一隐层的网络参数,rbm输入为图片数据
rbm1 = rbm([784,400]);
rbm1 = checkrbmtrain(@rbmtrain1,rbm1,X,50,0.1);
net_rbm1 = rbm2nnet(rbm1,'up');
h1 = nnetfw(net_rbm1,X);

%RBM训练得到第二隐层的网络参数,输入为第一隐层的输出
rbm2 = rbm([400,200]);
rbm2 = checkrbmtrain(@rbmtrain1,rbm2,h1,50,0.1);
net_rbm2 = rbm2nnet(rbm2,'up');
h2 = nnetfw(net_rbm2,h1);

%RBM训练得到第三隐层的网络参数,输入为第二隐层的输出
rbm3 = rbm([200,100]);
rbm3 = checkrbmtrain(@rbmtrain1,rbm3,h2,50,0.1);
net_rbm3 = rbm2nnet(rbm3,'up');
h3 = nnetfw(net_rbm3,h2);

%RBM训练得到第四隐层的网络参数,输入为第三隐层的输出
rbm4 = rbm([100,50]);
rbm4 = checkrbmtrain(@rbmtrain1,rbm4,h3,50,0.1);
net_rbm4 = rbm2nnet(rbm4,'up');
h4 = nnetfw(net_rbm4,h3);

%RBM训练得到第五隐层的网络参数,输入为第四隐层的输出
rbm5 = rbm([50,20]);
rbm5 = checkrbmtrain(@rbmtrain1,rbm5,h4,50,0.1);
net_rbm5 = rbm2nnet(rbm5,'up');
h5 = nnetfw(net_rbm5,h4);

%构建深度网络,并初始化参数为rbm训练出的参数。
net1 = nnet([784,400,200,100,50,20,10],'softmax');
net1.w{1} = net_rbm1.w{1};
net1.w{2} = net_rbm2.w{1};
net1.w{3} = net_rbm3.w{1};
net1.w{4} = net_rbm4.w{1};
net1.w{5} = net_rbm5.w{1};

%对深度网络进行BP训练
net2 = nnettrain(net1,X,Y,1000);
时间: 2024-01-17 20:17:21

深度信任网络DBN的一个matlab实例的相关文章

深度信念网络DBN

以下内容翻译自A fast learning algorithm for deep belief nets by Geoffrey E. HintonandSimon Osindero 一些符号: W.T:W的转置 1 Introduction 学习一个有向新年网络面临的问题: 1.难以所有层在推断隐藏状态条件下的后验分布 2.局部极值和梯度弥散 3.学习过程慢(因为要一次性学习所有参数) 模型:最上两个隐藏层两层形成一个联想存储器(associative memory),其他的隐藏层形成了一个

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

深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功.本人在多年之前也曾接触过神经网络.本系列文章主要记录自己对深度神经网络的一些学习心得. 简要描述深度神经网络模型. 1.  自联想神经网络与深度网络 自联想神经网络是很古老的神经网络模型,简单的说,它就是三层BP网络,只不过它的输出等于输入.很多时候我们并不要求输出精确的等于输入,而是允许一定的误差存在.所以,我们说,输出是对输入的一种重构.其网络结构可以很简单的表示如下: 如果我们在上述网络中不使用sigmoid函数,而使用线性函数

八.DBN深度置信网络

BP神经网络是1968年由Rumelhart和Mcclelland为首的科学家提出的概念,是一种按照误差反向传播算法进行训练的多层前馈神经网络,是目前应用比较广泛的一种神经网络结构.BP网络神经网络由输入层.隐藏层和输出层三部分构成,无论隐藏层是一层还是多层,只要是按照误差反向传播算法构建起来的网络(不需要进行预训练,随机初始化后直接进行反向传播),都称为BP神经网络.BP神经网络在单隐层的时候,效率较高,当堆积到多层隐藏层的时候,反向传播的效率就会大大降低,因此BP神经网络在浅层神经网路中应用

深度卷积网络CNN与图像语义分割

转载请注明出处: http://xiahouzuoxin.github.io/notes/ 级别1:DL快速上手 级别2:从Caffe着手实践 级别3:读paper,网络Train起来 级别3:Demo跑起来 读一些源码玩玩 熟悉Caffe接口,写Demo这是硬功夫 分析各层Layer输出特征 级别4:何不自己搭个CNN玩玩 级别5:加速吧,GPU编程 关于语义分割的一些其它工作 说好的要笔耕不缀,这开始一边实习一边找工作,还摊上了自己的一点私事困扰,这几个月的东西都没来得及总结一下.这就来记录

深度信念网络

深度信念网络 (Deep Belief Network, DBN) 由 Geoffrey Hinton 在 2006 年提出.它是一种生成模型,通过训练其神经元间的权重,我们可以让整个神经网络按照最大概率来生成训练数据.我们不仅可以使用 DBN 识别特征.分类数据,还可以用它来生成数据.下面的图片展示的是用 DBN 识别手写数字: 图 1 用深度信念网络识别手写数字.图中右下角是待识别数字的黑白位图,它的上方有三层隐性神经元.每一个黑色矩形代表一层神经元,白点代表处于开启状态的神经元,黑色代表处

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

Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.3 http://blog.csdn.net/sunbow0 第二章Deep Belief Network (深度信念网络) 3实例 3.1 測试数据 依照上例数据,或者新建图片识别数据. 3.2 DBN实例 //****************例2(读取固定样本:来源于经典优化算法測试函数Sphere Model)***********// //2 读取样本数据 Logge

CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题

from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anaconda3 (集成Python3及开发环境) TensorFlow安装:pip install tensorflow (CPU版) pip install tensorflow-gpu (GPU版) TFLearn安装:pip install tflearn 参考: Deep Residual Le

深度学习网络调参技巧

转自https://zhuanlan.zhihu.com/p/24720954?utm_source=zhihu&utm_medium=social 之前曾经写过一篇文章,讲了一些深度学习训练的技巧,其中包含了部分调参心得:深度学习训练心得.不过由于一般深度学习实验,相比普通机器学习任务,时间较长,因此调参技巧就显得尤为重要.同时个人实践中,又有一些新的调参心得,因此这里单独写一篇文章,谈一下自己对深度学习调参的理解,大家如果有其他技巧,也欢迎多多交流. 好的实验环境是成功的一半 由于深度学习实

LruCache:从网络加载图片缓存实例

OOM异常 堆内存用于存储实例对象,当程序不断创建对象,并且对象都有引用指向,那么垃圾回收机制就不会清理这些对象,当对象多到挤满堆内存的上限后,就产生OOM异常.Android系统为每个应用程序使用的内存设置了一个上限.这个上限值可以用下面的方法取得: long maxSize = Runtime.getRuntime().maxMemory(); OOM异常通常分为下面几种情况:1.内存泄漏导致的OOM:new出来的很多对象已经不需要了,但仍然有引用指向,所以垃圾回收机制无法回收. 其场景类似