行业资讯

【图像识别】基于卷积神经网络CNN手写数字识别matlab代码

发布时间:2026/8/19 12:27:29
【图像识别】基于卷积神经网络CNN手写数字识别matlab代码 1 简介针对传统手写数字的随机性,无规律性等问题,为了提高手写数字识别的检测准确性,本文在研究手写数字区域特点的基础上,提出了一种新的手写数字识别检测方法.首先,对采集的手写数字图像进行预处理,由于原始图像包含各种各样的噪声,为了防止造成干扰,对图像进行去噪,滤波等处理;然后,在MATLAB中构建卷积神经网络(cNN)模型结构,采用CNN模型中典型的LeNET-5的卷积模型,通过对采集图像进行逐层学习,训练与测试,将学习得到的高层特征用于手写数字识别.以随机手写数字与字母进行图像验证,结果表明,该模型算法应用于手写数字或字母准确识别,可获得较高的识别率,具有一定的通用性.就卷积神经网络而言其低隐层包括两大部分:卷积层和采样层高层则是逻辑回归分类器以及由全连接层与多层感知器所对应的隐含层。输入到第一个全连接层的特征图像是提取子采样层以及卷积层的特征而得到的。最后一个输出层属于分类器以输入图像为对象可利用逻辑回归作出分类支持向量机算法也同样可以。传统神经网络最为常见的激活函数为 eLU 和tanh正是由于上述函数的存在神经网络具备了非线性映射能力。站在数学的视角上对上述函数展开分析非线性函数 eLU 和 tanh 对两侧区表现出较小的信号增益对中央区则表现出较大的增益就特征空间映射而言效果还是相当好的。eLU和 tanh 的公式如下:2 部分代码%% 准备工作空间 clc clear all close all %% 导入数据 digitDatasetPath fullfile(./, /HandWrittenDataset/); imds imageDatastore(digitDatasetPath, ... IncludeSubfolders,true,LabelSource,foldernames);% 采用文件夹名称作为数据标记 %,ReadFcn,mineRF % 数据集图片个数 countEachLabel(imds) numTrainFiles 17;% 每一个数字有22个样本取17个样本作为训练数据 [imdsTrain,imdsValidation] splitEachLabel(imds,numTrainFiles,randomize); % 查看图片的大小 imgreadimage(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/, FileExtensions, .jpg,... IncludeSubfolders, false);%%,ReadFcn,mineRF mLabelscell(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 mLabels2categorical(mLabels); mineSet.Labels mLabels2; %% 使用网络进行分类并计算准确性 % 手写数据 YPred classify(net,mineSet); YValidation mineSet.Labels; % 计算正确率 accuracy sum(YPred YValidation)/numel(YValidation); % 绘制预测结果 figure; nSample10; ind randperm(size(YPred,1),nSample); for i 1:nSample subplot(2,fix((nSample1)/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)))]) else xlabel([真实: char(YValidation(ind(i)))],color,r) end end % 伸缩反色 % function data mineRF(filename) % img imread(filename); % datauint8(255-rgb2gray(imresize(img,[28 28]))); % % end % 二值化 % function data mineRF(filename) % img imread(filename); % dataimbinarize(img); % % end3 仿真结果4 参考文献[1]高磊, 洪奔奔, and 姚青岐. 基于卷积神经网络的随机手写数字识别. 软件 39.9(2018):5.**部分理论引用网络文献若有侵权联系博主删除。**