本文为原创文章转载请注明出处,博主博客地址:http://blog.csdn.net/qq_20259459 和
作者( jinweizhi93@gmai.com )信息。
今天介绍一个曾经用过的简单的CNN Toolbox--------DeepLearnToolbox-master。
DeepLearnToolbox-master 介绍:
贡献者:Rasmus Berg Palm(丹麦)
最后更新时间:2012年
现在状态:停止维护
简介:DeepLearnToolbox-master 最为一个工具箱里面包括了CAE,CNN,DBN,NN,SAE这些模型。其本身而言是非常简单的设计,所以就目前而言早已经过时了。也不会再被用于开发中。现在主流当然是: Theano, torch, tensorflow, Matconvnet, MxNet, caffe,后面我会选择介绍。
但是对于新学者来说,DeepLearnToolbox-master 中的CNN模型是以LeNet-5编写的,所以非常好,适合我们去理解学习。
DeepLearnToolbox-master下载地址: https://github.com/rasmusbergpalm/DeepLearnToolbox
CNN 流程:
首先我们运行 test_example_CNN.m.
然后 test_example_CNN.mat 会载入mnist_uint8.mat
接着去调用cnnsetup.m, cnntrain.m, cnntest.m.
接下来cnntrain.m 会去调用 cnnff.m, cnnbp.m, cnnapplygrads.m.
最后就是画出 MSE-- data 的图像。
所以可以看出流程还是非常简单明了的。
最终我们会形成的CNN图示--经典的LeNet-5:
如果初学者不知道权重权值怎么计算请看下图,当时自己学习时做的笔记。我一步一步都写的非常的清楚,很好理解。
下面开始介绍CODE:
1. test_example_CNN.mat :
%主要功能:在mnist数据库上做实验,验证工具箱的有效性
% 算法流程:1)载入训练样本和测试样本
% 2)设置CNN参数,并进行训练
% 3)进行检测cnntest()
% 注意事项:1)由于直接将所有测试样本输入会导致内存溢出,故采用一次只测试一个训练样本的测试方法
function test_example_CNN
%%load data
load mnist_uint8; %载入数据
%% input data
train_x = double(reshape(train_x',28,28,60000))/255; %标准化数据(这里作者给出的方法并不是很好需要改进)
test_x = double(reshape(test_x',28,28,10000))/255;
train_y = double(train_y');
test_y = double(test_y');
%% ex1 Train a 6c-2s-12c-2s Convolutional neural network
%will run 1 epoch in about 200 second and get around 11% error.
%With 100 epochs you'll get around 1.2% error
%% 翻译内容:
%%%%%%%%%%%%%%%%%%%%设置卷积神经网络参数%%%%%%%%%%%%%%%%%%%%
% 主要功能:训练一个6c-2s-12c-2s形式的卷积神经网络,预期性能如下:
% 1)迭代一次需要200秒左右,错误率大约为11%
% 2)迭代一百次后错误率大约为1.2%
% 算法流程:1)构建神经网络并进行训练,以CNN结构体的形式保存
% 2)用已知的训练样本进行测试
% 注意事项:1)之前在测试的时候提示内存溢出,后来莫名其妙的又不溢出了,估计到了系统的内存临界值
%%=========================================================================
rand('state',0)
cnn.layers = {
struct('type', 'i') %input layer%输入层
struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer%卷积层
struct('type', 's', 'scale', 2) %sub sampling layer%下采样层
struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer%卷积层
struct('type', 's', 'scale', 2) %subsampling layer%下采样层
};
%% 训练选项,alpha学习效率(不用),batchsiaze批训练总样本的数量,numepoches迭代次数
opts.alpha = 0.1;
opts.batchsize = 100;
opts.numepochs = 100;
%%
cnn = cnnsetup(cnn, train_x, train_y);
cnn = cnntrain(cnn, train_x, train_y, opts);
[er, bad] = cnntest(cnn, test_x, test_y);
%plot mean squared error
figure; plot(cnn.rL);
assert(er<0.12, 'Too big error');
% 输入参数&#