matlab深度学习——【卷积神经网络】手写字的识别

	这里主要是基于卷积神经网络的手写字的识别,我是用matlab做的,如果有对卷积神经网络不太熟悉的伙伴可以搜下,网上资源比较多,我这里就不多说了,直接上代码了。
%%准备工作空间
clc
clear all
close all

%%导入数据
digitDatasetPath = fullfile('./','/HandWrittenDataset/');
imds = imageDatastore(digitDatasetPath,...
    'IncludeSubfolders',true,'LabelSource','foldernames');%采用文件夹名称作为数据标记

%%数据集图个数
countEachLabel(imds)

numTrainFiles = 17;%每一个数字有22个样本,取17个样本作为训练数据
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomized');
%查看图片的大小
img = readimage(imds,1);
size(img)

%%定义卷积神经网络的结构
layers = [
%输入层
imageInputLayer([28 28 1])

%卷积层
convolution2dLayer(5,6,'Padding',2)
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'stride',2)

convolution2dLayer(5,16)
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'stride',2)

convolution2dLayer(5,120)
batchNormalizationLayer
reluLayer

%最终层
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];

%%训练神经网络

一、设置训练参数
options = trainingOptions('sgdm',...
    'MaxEpochs',50,...
    'ValidationData',imdsValidation,...
    'ValidationFrequency',5,...
    'Verbose',false,...
    'Plots','training-progress');%显示训练的进度

%训练神经网络,保存网络
net = trainNetwork(imdsTrain,layers,options);
save 'CSNet.mat' net

%%标记数据(文件名称方式,自行构造)
mineSet = imageDatastore('./hw22/hw22/',  'FileExtensions','.jpg',...
    'IncludeSubfolders',false);
mLabels = cell(size(mineSet.Files,1),1);
for i = 1:size(mineSet.Files,1)
[filepath,name,ext] = fileparts(char(mineSet.Files{i}));
mLabels{i,1} = char(name);
end
mLabels2 = categorical(mLabels);
mineSet.Labels = mLabels2;


%%%使用网络进行分类并计算准确性
%手写数据
YPred = classify(net,mineSet);
YValidation = mineSet.Labels;
%计算正确率
accuracy = sum(YPred == YValidation)/numel(YValidation)
%绘制预测结果
figure;
nSample = 10;
ind = randperm(size(YPred,1),nSample);
for i = 1:nSample
    
subplot(2,fix((nSample+1)/2),i)
imshow(char(mineSet.Files(ind(i))))
title(['预测:' char(YPred(ind(i)))])
if char(YPred(ind(i))) ==char(YValidation(ind(i)))
    xlabel(['真实:' char(YValidation(ind(i)))],'Color','b')
else
    xlabel(['真实:' char(YValidation(ind(i)))],'color','r')
end 

end

直接上结果:
matlab深度学习——【卷积神经网络】手写字的识别_第1张图片
里面的数据存放的位置根据自己的情况修改即可。
数据集:
之前百度云链接失效;已上传到CSDN,免费的,不需要积分!!!
手写数字数据集

你可能感兴趣的:(卷积神经网络,卷积神经网络,手写字识别,matlab深度学习)