clear;clc;
load traindata.mat;
train_x = traindata_grey_cas(1:15000,:) / 255;
test_x = traindata_grey_cas(15001:17559,:) / 255;
train_y = traindata_y_7(1:15000,:);
test_y = traindata_y_7(15001:17559,:);
%% ex1 train a 100 hidden unit RBM and visualize its weights
rand('state',0)
dbn.sizes = [100];
opts.numepochs = 1;
opts.batchsize = 100;
opts.momentum = 0;
opts.alpha = 1;
dbn = dbnsetup(dbn, train_x, opts);
dbn = dbntrain(dbn, train_x, opts);
figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights
%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NN
rand('state',0)
%train dbn
dbn.sizes = [1000 500 600];
opts.numepochs = 1;
opts.batchsize = 100;
opts.momentum = 0;
opts.alpha = 1;
dbn = dbnsetup(dbn, train_x, opts);
dbn = dbntrain(dbn, train_x, opts);
%unfold dbn to nn
nn = dbnunfoldtonn(dbn, 7);
nn.activation_function = 'sigm';
%train nn
opts.numepochs = 1;
opts.batchsize = 100;
nn = nntrain(nn, train_x, train_y, opts);
[er, bad] = nntest(nn, test_x, test_y);
assert(er < 0.10, 'Too big error');
代码来源自github上的深度学习工具箱里面的例程,用作手写数字识别。我想用此例程实现人脸姿态角度的识别,把输入的数据由手写数字图片变成了人脸图片,原例程有60000组训练数据,10000组测试数据,我输入的数据一共有17559组,取前15000组作为训练数据,其余作为测试数据.
可是跑出来的误差er太大,足足有0.8多。第一层rbm训练出的权重的图也跟期望的不太一样。
