%%%%%%%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.csdn.net/u014537068/article/details/44926571