%% Time:2019.3.7
%% Name:Michael Beechan
%% Function:
%% 这个例子展示了如何创建和训练一个简单的卷积神经网络用于深度学习分类。
%% 卷积神经网络是深度学习的重要工具,尤其适用于图像识别。
%% Load and explore image data.
%% Define the network architecture.
%% Specify training options.
%% Train the network.
%% Predict the labels of new data and calculate the classification accuracy.
%% 加载数据并存储
digitDatasetPath = fullfile(matlabroot, 'toolbox', 'nnet', 'nndemos', ...
'nndatasets', 'DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders', true, 'LabelSource', 'foldernames');
%% 随机显示数据
figure;
perm = randperm(10000, 20);
for i = 1 : 20
subplot(4, 5, i);
imshow(imds.Files{perm(i)});
end
%% 计算每个类别中的图像数量
labelCount = countEachLabel(imds)
%% 指定图像大小尺寸28*28*1
img = readimage(imds, 1);
size(img)
%% 划分数据为训练集合验证集,训练集中每个类别包含750张图像,验证集包含其余图像的标签
numTrainFiles = 750;
[imdsTrain, imdsValidation] = splitEachLabel(imds, numTrainFiles, 'randomize');
%% 定义CNN框架
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3, 8, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
convolution2dLayer(3, 16, 'padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
convolution2dLayer(3, 32, 'Padding', 'same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
%% 指定训练Options——SGDM,学习率0.01,最大epoch=4
options = trainingOptions('sgdm', ...
'InitialLearnRate', 0.01, ...
'MaxEpochs', 4, ...
'Shuffle', 'every-epoch', ...
'ValidationData', imdsValidation, ...
'ValidationFrequency', 30, ...
'Verbose', false, ...
'Plots', 'training-progress');
%% 使用训练集训练网络
net = trainNetwork(imdsTrain, layers, options);
%% 对验证图像进行分类并计算精度
YPred = classify(net, imdsValidation);
YValidation = imdsValidation.Labels;
accuracy = sum(YPred == YValidation) / numel(YValidation)
评论0
最新资源