最近在做卷积神经网络,看了MATLAB版本的CNN包的实现,同时看了网上许多大神对此包的详细代码解释,感觉醍醐灌顶,同时感觉代码研究过程中仍有许多疑问,在这里针对MATLAB深度学习包的卷积神经网络包的训练说明,分别对程序运行过程中出现的变量以及其对应的意义做出说明。
首先,看此文章之前,请先了解以下前置内容:
Deep Learning(深度学习)学习笔记整理系列之(三) - zouxy09的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/zouxy09/article/details/8775518
BP算法——别跟我说看完这个你还不懂 - Hungryof的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/hungryof/article/details/50436231
卷积神经网络的详解 http://www.dataguru.cn/article-10638-1.html
详细解释CNN卷积神经网络各层的参数和链接个数的计算http://blog.csdn.net/dcxhun3/article/details/46878999
Deep Learning论文笔记之(四)CNN卷积神经网络bp算法推导和实现 http://blog.csdn.net/zouxy09/article/details/9993371/
Deep learning:五十一(CNN的反向求导及练习) - tornadomeet - 博客园
http://www.cnblogs.com/tornadomeet/p/3468450.html
cnn公式推导 - alexanderkun - 博客园
http://www.cnblogs.com/alexanderkun/p/4863691.html
然后,对于程序的详细源代码解释,参照此博客,本文是对此博客中一些遗漏的地方做些补充和说明:http://blog.csdn.net/zouxy09/article/details/9993743/
首先,在test_example_CNN.m中,各个变量的说明:
- load mnist_uint8;
mnist_uint8.mat:手写数字原始数据集,包括以下四个变量:
train_x为60000幅大小为784的输入图像,train_y为60000幅大小为10的train_x图像对应的分类结果。这两个矩阵用来训练神经网络。
test_x为10000幅大小为784的输入图像,test_y为10000幅test_x图像应该输出的、正确的分类结果(softmax回归,结果由长度为10的向量组成,如[x1,x2,…,x10],x1到x10分别有0~1的值代表该图像对应数字是1~10的概率,最大的那个xi既是分类结果)。用test_x去训练神经网络,得到结果后与test_y比较,从而输出错误率。
-
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');
对于这四行语句,是分别对上面说的四个矩阵进行变形操作,转换成double类型后求平均值。
对train_x,先把60000x784的矩阵通过转置(')和reshape操作,转换成28x28x60000的图像,然后转换成double除255(原始输入数据为0~255的值,这里需要压缩成0~1),即得到了60000幅28x28的手写数字输入图像。
对train_y,直接转置(')然后转换成double,即得到了10x60000的矩阵,即60000幅train_x对应图像的分类结果。
test_x与test_y同上。
-
来看opt,opt是训练过程中的训练参数,有这么三行:
opts.alpha = 1;
opts.batchsize = 50;
opts.numepochs = 1;
意义分别是系统调整权值时候的学习率α,每次训练的时候使用的一个样本的大小,以及训练次数。
- cnn.layers = {
struct('type','i') %input layer