Hinton关于RBM的代码注解之(三)mnistclassify.m

本文介绍了一种基于深度学习的手写数字识别方法,通过使用三层受限玻尔兹曼机(RBM)进行预训练,并结合反向传播算法进行微调,实现了对手写数字的有效分类。

%%%%%%%mnistclssify.m%%%%%%%%%%%%%%%%%

clear all
close all


maxepoch=50;    %最大迭代次数
numhid=500; numpen=500; numpen2=2000; %对应的1,2,3层隐含层单元的个数


fprintf(1,'Converting Raw files into Matlab format \n');
converter;                %将MNIST数据库转化为MATLAB的数据


fprintf(1,'Pretraining a deep autoencoder. \n');
fprintf(1,'The Science paper used 50 epochs. This uses %3i \n', maxepoch);


makebatches;              %分批,分批的好处是便于计算,减少计算量
%这是分批后的数据库bachdata, numcase:每个批次的数目  numdims:每个样本的维数  numbatches:批次的数目
[numcases numdims numbatches]=size(batchdata); 




fprintf(1,'Pretraining Layer 1 with RBM: %d-%d \n',numdims,numhid);
restart=1;
rbm;                     %开始预训练RBM,
hidrecbiases=hidbiases;  %保存隐含层的偏置
save mnistvhclassify vishid hidrecbiases visbiases;


fprintf(1,'\nPretraining Layer 2 with RBM: %d-%d \n',numhid,numpen);
batchdata=batchposhidprobs;  %把上一层的隐含层作为可见层,进行RBM预训练
numhid=numpen;                %该层隐含层的数目
restart=1;
rbm;
hidpen=vishid; penrecbiases=hidbiases; hidgenbiases=visbiases;  %复制,保存数据
save mnisthpclassify hidpen penrecbiases hidgenbiases;


fprintf(1,'\nPretraining Layer 3 with RBM: %d-%d \n',numpen,numpen2); %同上
batchdata=batchposhidprobs;
numhid=numpen2;
restart=1;
rbm;
hidpen2=vishid; penrecbiases2=hidbiases; hidgenbiases2=visbiases;
save mnisthp2classify hidpen2 penrecbiases2 hidgenbiases2;


backpropclassify;  %BP反向传播,进行微调


原文地址:http://blog.youkuaiyun.com/u014537068/article/details/44926571


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值