这是MATLAB关于Deep Learning 的一个入门的简单的例程
Step1
加载并查看数据
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ...
'nndatasets','DigitDataset');
digitData = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders',true,'LabelSource','foldernames');
然后随机显示其中的一部分如下
figure;
perm = randperm(10000,20);
for i = 1:20
subplot(4,5,i);
imshow(digitData.Files{perm(i)});
end
Step2.
查看每个标签的数量
CountLabel = digitData.countEachLabel;
查看每个图片的尺寸大小
img = readimage(digitData,1);
size(img)
ans =
28 28
把数据集分为 训练数据集 和 测试数据集
trainingNumFiles = 750;
rng(1) % For reproducibility
[trainDigitData,testDigitData] = splitEachLabel(digitData, ...
trainingNumFiles,'randomize');
Step3.
定义神经层,定义卷积网络的结构
layers = [imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer()];
Image Input Layer :图像输入层,就是图像的尺寸,长宽通道数,因为是黑白图像,通道数为1,如果为彩色的话,就是3
Convolutional Layer :卷积层,第一个参数是滤波器的尺寸,代表5*5,第二个参数是滤波器的个数
ReLU Layer:激活函数的个数
Max-Pooling Layer:最大池化层
Fully Connected Layer :全连接层,和待输出的标签个数一致
Softmax Layer:激活函数或者分类函数
Classification Layer:分类函数
Step4.
指定训练参数
options = trainingOptions('sgdm','MaxEpochs',15, ...
'InitialLearnRate',0.0001);
训练数据
convnet = trainNetwork(trainDigitData,layers,options);
训练结果如下
Step5.
分类测试数据集
YTest = classify(convnet,testDigitData);
TTest = testDigitData.Labels;
计算准确率
accuracy = sum(YTest == TTest)/numel(TTest);
总结:
学习了几个通用函数的使用方式
fullfile,用来构造文件路径
randperm,取随机整数
rng,初始化随机数种子关于深度学习用到的几个函数
imageDatastore,组建图像处理数据集
splitEachLabel,标签分类
CNN卷积的一些设置函数:
imageInputLayer
convolution2dLayer
reluLayer
maxPooling2dLayer
fullyConnectedLayer
softmaxLayer
classificationLayer
trainingOptions
trainNetwork,训练神经网络
classify,对训练好的神经网络应用用于分类