当前位置: 首页 > ds >正文

MATLAB实现神经网络的OCR识别

使用说明:

  1. 运行要求‌:

    • MATLAB R2020b 或更新版本
    • 已安装 Deep Learning Toolbox
    • 推荐使用GPU加速(训练时在代码开头添加 gpuDevice(1)
  2. 代码特点‌:

    • 使用MATLAB自带的MNIST手写数字数据集
    • 包含数据可视化、网络架构、训练曲线和混淆矩阵
    • 最终测试准确率可达约98%
    • 包含单张图片预测演示

 

%% 神经网络OCR识别示例(MATLAB 2020b及以上版本)
% 需要安装 Deep Learning Toolbox%% 步骤1:加载和预处理数据
clc; clear; close all% 加载MATLAB自带的手写数字数据集
digitDatasetPath = fullfile(matlabroot, 'toolbox', 'nnet', 'nndemos', ...'nndatasets', 'DigitDataset');
imds = imageDatastore(digitDatasetPath, ...'IncludeSubfolders', true, 'LabelSource', 'foldernames');% 显示部分样本
figure
numImages = 10000;
perm = randperm(numImages, 20);
for i = 1:20subplot(4,5,i);imshow(imds.Files{perm(i)});
end% 分割数据集(70%训练,30%测试)
[imdsTrain, imdsTest] = splitEachLabel(imds, 0.7, 'randomized');%% 步骤2:构建神经网络
inputSize = [28 28 1]; % 输入图像尺寸layers = [imageInputLayer(inputSize, 'Name', 'input')   % 输入层convolution2dLayer(3, 16, 'Padding', 'same', 'Name', 'conv1') % 卷积层batchNormalizationLayer('Name', 'bn1')reluLayer('Name', 'relu1')maxPooling2dLayer(2, 'Stride', 2, 'Name', 'maxpool1') % 池化层convolution2dLayer(3, 32, 'Padding', 'same', 'Name', 'conv2')batchNormalizationLayer('Name', 'bn2')reluLayer('Name', 'relu2')fullyConnectedLayer(10, 'Name', 'fc')          % 全连接层softmaxLayer('Name', 'softmax')               % 分类层classificationLayer('Name', 'classification')];%% 步骤3:设置训练参数
options = trainingOptions('adam', ...'InitialLearnRate', 0.001, ...'MaxEpochs', 10, ...'Shuffle', 'every-epoch', ...'ValidationData', imdsTest, ...'ValidationFrequency', 30, ...'Verbose', true, ...'Plots', 'training-progress');%% 步骤4:调整图像大小并训练网络
augimdsTrain = augmentedImageDatastore(inputSize(1:2), imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2), imdsTest);net = trainNetwork(augimdsTrain, layers, options);%% 步骤5:测试网络性能
[YPred, probs] = classify(net, augimdsTest);
accuracy = mean(YPred == imdsTest.Labels);
disp(['测试准确率: ', num2str(accuracy*100), '%'])% 显示混淆矩阵
figure
confusionchart(imdsTest.Labels, YPred)%% 步骤6:单张图片测试示例
% 随机选取测试集中的一个图像
testImage = readimage(imdsTest, randi(numel(imdsTest.Files)));% 预处理并预测
inputImg = imresize(testImage, inputSize(1:2));
[result, scores] = classify(net, inputImg);% 显示结果
figure
imshow(testImage)
title(['预测结果: ' char(result), '  真实标签: ' char(imdsTest.Labels(1))])
%% 神经网络OCR识别示例(MATLAB 2020b及以上版本)
% 需要安装 Deep Learning Toolbox%% 步骤1:加载和预处理数据
clc; clear; close all% 加载MATLAB自带的手写数字数据集
digitDatasetPath = fullfile(matlabroot, 'toolbox', 'nnet', 'nndemos', ...'nndatasets', 'DigitDataset');
imds = imageDatastore(digitDatasetPath, ...'IncludeSubfolders', true, 'LabelSource', 'foldernames');% 显示部分样本
figure
numImages = 10000;
perm = randperm(numImages, 20);
for i = 1:20subplot(4,5,i);imshow(imds.Files{perm(i)});
end% 分割数据集(70%训练,30%测试)
[imdsTrain, imdsTest] = splitEachLabel(imds, 0.7, 'randomized');%% 步骤2:构建神经网络
inputSize = [28 28 1]; % 输入图像尺寸layers = [imageInputLayer(inputSize, 'Name', 'input')   % 输入层convolution2dLayer(3, 16, 'Padding', 'same', 'Name', 'conv1') % 卷积层batchNormalizationLayer('Name', 'bn1')reluLayer('Name', 'relu1')maxPooling2dLayer(2, 'Stride', 2, 'Name', 'maxpool1') % 池化层convolution2dLayer(3, 32, 'Padding', 'same', 'Name', 'conv2')batchNormalizationLayer('Name', 'bn2')reluLayer('Name', 'relu2')fullyConnectedLayer(10, 'Name', 'fc')          % 全连接层softmaxLayer('Name', 'softmax')               % 分类层classificationLayer('Name', 'classification')];%% 步骤3:设置训练参数
options = trainingOptions('adam', ...'InitialLearnRate', 0.001, ...'MaxEpochs', 10, ...'Shuffle', 'every-epoch', ...'ValidationData', imdsTest, ...'ValidationFrequency', 30, ...'Verbose', true, ...'Plots', 'training-progress');%% 步骤4:调整图像大小并训练网络
augimdsTrain = augmentedImageDatastore(inputSize(1:2), imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2), imdsTest);net = trainNetwork(augimdsTrain, layers, options);%% 步骤5:测试网络性能
[YPred, probs] = classify(net, augimdsTest);
accuracy = mean(YPred == imdsTest.Labels);
disp(['测试准确率: ', num2str(accuracy*100), '%'])% 显示混淆矩阵
figure
confusionchart(imdsTest.Labels, YPred)%% 步骤6:单张图片测试示例
% 随机选取测试集中的一个图像
testImage = readimage(imdsTest, randi(numel(imdsTest.Files)));% 预处理并预测
inputImg = imresize(testImage, inputSize(1:2));
[result, scores] = classify(net, inputImg);% 显示结果
figure
imshow(testImage)
title(['预测结果: ' char(result), '  真实标签: ' char(imdsTest.Labels(1))])

 

 

http://www.xdnf.cn/news/2805.html

相关文章:

  • 爬虫学习笔记(三)--Http协议
  • CSS元素动画篇:基于页面位置的变换动画
  • leetcode 19. 删除链表的倒数第 N 个结点
  • [多彩数据结构] 笛卡尔树
  • 智能Python开发工具PyCharm v2025.1——AI层级功能重磅升级
  • Ajax 提交表单与文件上传
  • Windows 图形显示驱动-待机休眠优化
  • 升级Xcode16,flutter项目报错
  • 浏览器插件,提示:此扩展程序未遵循 Chrome 扩展程序的最佳实践,因此已无法再使用
  • jeecgboot 3.8.0 集成knife4j问题一文解决
  • MCP:如何通过模型控制推理助力AI模型实现“深度思考”?
  • 机器视觉的坐标标定
  • Python分支结构全面解析与实战应用指南
  • opendds编译开发(c#封装)
  • Android WebRTC回声消除
  • 具身智能:从理论突破到场景落地的全解析
  • 小目标检测的集成融合论文阅读
  • 项目实战-贪吃蛇大作战【补档】
  • 快速搭建对象存储服务 - Minio,并解决临时地址暴露ip、短链接请求改变浏览器地址等问题
  • 对比N+1查询和关联聚合查询
  • Spring Cloud Config 自定义配置源与动态刷新:从原理到企业级实践
  • Kafka 配置参数性能调优建议
  • 31、简要描述Promise.all的用途
  • 在 Ubuntu 22.04 x64 系统安装/卸载 1Panel 面板
  • 电子电器架构 ---电气/电子架构将在塑造未来出行方面发挥啥作用?
  • [Linux运维] [Ubuntu/Debian]在Lightsail Ubuntu服务器上安装Python环境的完整指南
  • 在线图书管理系统的结构化设计过程讲解
  • [密码学实战]SDF之设备管理类函数(一)
  • uniapp常用
  • case和字符串操作