深度学习 1. CNN的构建和解释--最简单的CNN构造(LeNet-5)# By deepLearnToolbox-master

本文为原创文章转载请注明出处,博主博客地址: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这些模型。其本身而言是非常简单的设计,所以就目前而言早已经过时了。也不会再被用于开发中。现在主流当然是: Theanotorchtensorflow, 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');



2. cnnsetup:


% 输入参数&#

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值