MATLAB实现CNN一般会用到deepLearnToolbox-master。但是根据Git上面的说明,现在已经停止更新了,而且有很多功能也不太能够支持,具体的请大家自习看一看Git中的README。
deepLearnToolbox-master是一个深度学习matlab包,里面含有很多机器学习算法,如卷积神经网络CNN,深度信念网络DBN,自动编码AutoEncoder(堆栈SAE,卷积CAE)的作者是 Rasmus Berg Palm (rasmusbergpalm@gmail.com)
代码下载:https://github.com/rasmusbergpalm/DeepLearnToolbox
这里我们介绍deepLearnToolbox-master中的CNN部分。
函数
调用关系为:
该模型使用了mnist的数字mnist_uint8.mat作为训练样本,作为CNN的一个使用样例,每个样本特征为一个 28×28=的向量 。
网络结构为:
Test_example_CNN
Test_example_CNN:
- 1设置CNN的基本参数规格,如卷积、降采样层的数量,卷积核的大小、降采样的降幅
- 2 cnnsetup函数 初始化卷积核、偏置等
- 3 cnntrain函数 训练cnn,把训练数据分成batch,然后调用
- 3.1cnnff 完成训练的前向过程
- 3.2 cnnbp计算并传递神经网络的error,并计算梯度(权重的修改量)
- 3.3 cnnapplygrads 把计算出来的梯度加到原始模型上去
- 4 cnntest 函数,测试当前模型的准确率
该模型采用的数据为mnist_uint8.mat,含有70000个手写数字样本其中60000作为训练样本,10000作为测试样本。
把数据转成相应的格式,并归一化。
load mnist_uint8;
train_x = double(reshape(traub.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' will get around 1.2% error
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) % convolutional layer
struct('type','s','scale',2) % sub sampling layer
%% 训练选项,alpha学习效率(不用),batchsiaze批训练总样本的数量,numepoches迭代次数
opts.alpha = 1;
opts.batchsize = 50;
opts.numepochs = 1;
初始化网络,对数据进行批训练,验证模型准确率。
cnn = cmmsetup(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);
Cnnsetup.m
该函数你用于初始化CNN的参数。
设置各层的mapsize大小,
初始化卷积层的卷积核、bias
尾部单层感知机的参数设置
bias统一初始化为0
权重设置为:random(-1,1)/ (6(输入