基于BP神经网络进行手写体识别(Matlab代码实现)

简介: 基于BP神经网络进行手写体识别(Matlab代码实现)

💥1 概述

字符识别长期以来都是采用传统的识别方法, 对印刷体字符的识别率一般只是稳定在96%左右, 未能进一步提高, 而对手写体字符的识别, 其研究还处于探索阶段, 其识别率还相当低, 因此, 为了提高识别率, 就必须寻求新的方法和途径。


20世纪80年代中期, 人们已经开始利用人工神经网络解决手写体数字识别问题。人工神经网络为OCR研究提供了新的手段, 它具有一些传统技术所没有的特点:1) 具有很强的分类能力, 可以在特征空间内形成任意复杂的决策区域;2) 硬件实现后的神经网络分类速度比传统方法快得多;3) 分类器便于训练, 无需人为过多的干预。特别是对手写体字符识别问题, 神经网络技术更显示出独特的优越性。


目前研究的神经网络字符识别系统可划分为两大类.第一类系统实际上是传统方法与神经网络技术的结合, 这也是本文采用的方法.这类系统分为两块, 第一块主要完成样本模式预处理和字符特征抽取任务, 第二块是用前面获得的模式特征来训练神经网络分类器, 从而达到识别字符的目的。这类系统充分利用了人的经验来获取模式特征以及神经网络的杰出分类能力来识别字符, 是人们通常采用的方法。第二类系统省去了特征抽取工作, 整个字符直接作为神经网络的输入, 这类系统的神经网络结构的复杂度大大增加了, 首先输入模式维数的增加导致网络规模的庞大, 使得网络的训练、学习非常困难。此外神经网络结构上要消除模式变形的影响。通常这类网络都采用局部连接的方式减少网络的复杂度, 并采用共享连接权的策略增强网络抗变形 (输入模式) 的能力。


由于人工神经网络具有并行处理和很强的容错性等特点, 因此有可能大大提高手写体字母数字识别的准确率和速度。目前神经网络手写体字母数字识别系统的识别水平已与传统模式方法相当, 且大有提高的余地。本文阐述了利用BP网络进行手写体字母 (小写) 、数字识别的一些尝试, 取得了令人满意的测试结果。


📚2 运行结果

🎉3 参考文献

[1]余波,简炜,方勇.利用Matlab神经网络工具箱在VC++.net中进行手写体数字识别[J].湖北汽车工业学院学报,2007(01):39-42.

👨‍💻4 Matlab代码

主函数部分代码:

%实现一个手写体数字识别的神经网络训练程序
clc;
clear;
load('X.mat', 'X');
load('data.mat','y');
%测试集100张图片
testData=[X(1:10,:);X(501:510,:);X(1001:1010,:);X(1501:1510,:);X(2001:2010,:);X(2501:2510,:);X(3001:3010,:);X(3501:3510,:);X(4001:4010,:);X(4501:4510,:)];
testResult=[y(1:10,:);y(501:510,:);y(1001:1010,:);y(1501:1510,:);y(2001:2010,:);y(2501:2510,:);y(3001:3010,:);y(3501:3510,:);y(4001:4010,:);y(4501:4510,:)];
% image = reshape(X(1,:),20,20);
% imshow(image)
%准备训练数据
num=200; %每个数字训练数据集的大小,最大490
trainingData=[X(11:10+num,:);X(511:510+num,:);X(1011:1010+num,:);X(1511:1510+num,:);X(2011:2010+num,:);X(2511:2510+num,:);X(3011:3010+num,:);X(3511:3510+num,:);X(4011:4010+num,:);X(4511:4510+num,:)];
trainingTarget=[y(11:10+num,:);y(511:510+num,:);y(1011:1010+num,:);y(1511:1510+num,:);y(2011:2010+num,:);y(2511:2510+num,:);y(3011:3010+num,:);y(3511:3510+num,:);y(4011:4010+num,:);y(4511:4510+num,:)];
trainingTarget(1:num) = zeros(1,num);
testResult(1:10) = zeros(1,10);
save('trainingTarget.mat','trainingTarget')
trainX = trainingData';
trainT = trainingTarget';
testX = testData';
testT = testResult';
algorithms = char('traingd','traingdx','trainrp','traincgf','traincgp','traincgb','trainscg','trainoss','trainbr','trainlm');
node_s = [20,30,40,50,60];
lr_s = [0.01,0.005,0.001,0.0005,0.0001];
regression_test = zeros(1,5);
regression_train = zeros(1,5);
performance_test = zeros(1,5);
performance_train = zeros(1,5);
for i = 1:length(lr_s)
    % [x,t] = building_dataset;
    net = feedforwardnet([50,10]);
%     net.trainFcn = strtrim(algorithms(3,:));
    net.trainFcn = 'traincgf';
%     net.divideParam.trainRatio = 70/100;
%     net.divideParam.valRatio = 15/100;
%     net.divideParam.testRatio = 15/100;
    net.trainParam.epochs = 10000; %设置训练回合数
    net.trainParam.goal = 0; %设置训练目标
    net.trainParam.lr = lr_s(i); % 设置学习率
%     net.trainParam.max_fail = 100;
    net.divideFcn = '';
    % view(net)
    % 训练神经网络
    [net,TR] = train(net,trainX,trainT);
    file_path_name_ = [save_path,num2str(i)];
    if exist(file_path_name_)==0   %该文件夹不存在,则直接创建
        mkdir(file_path_name_);
    end


相关文章
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于BP神经网络的苦瓜生长含水量预测模型matlab仿真
本项目展示了基于BP神经网络的苦瓜生长含水量预测模型,通过温度(T)、风速(v)、模型厚度(h)等输入特征,预测苦瓜的含水量。采用Matlab2022a开发,核心代码附带中文注释及操作视频。模型利用BP神经网络的非线性映射能力,对试验数据进行训练,实现对未知样本含水量变化规律的预测,为干燥过程的理论研究提供支持。
|
2月前
|
机器学习/深度学习 算法 5G
基于BP神经网络的CoSaMP信道估计算法matlab性能仿真,对比LS,OMP,MOMP,CoSaMP
本文介绍了基于Matlab 2022a的几种信道估计算法仿真,包括LS、OMP、NOMP、CoSaMP及改进的BP神经网络CoSaMP算法。各算法针对毫米波MIMO信道进行了性能评估,通过对比不同信噪比下的均方误差(MSE),展示了各自的优势与局限性。其中,BP神经网络改进的CoSaMP算法在低信噪比条件下表现尤为突出,能够有效提高信道估计精度。
44 2
|
2月前
|
编解码 算法 数据安全/隐私保护
基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,turbo码以及BCH码
本程序系统基于BP译码的LDPC误码率MATLAB仿真,分析不同码长、码率、信道对译码性能的影响,并与卷积码、Turbo码及BCH编译码进行对比。升级版增加了更多码长、码率和信道的测试,展示了LDPC码的优越性能。LDPC码由Gallager在1963年提出,具有低复杂度、可并行译码等优点,近年来成为信道编码研究的热点。程序在MATLAB 2022a上运行,仿真结果无水印。
59 0
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
211 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
135 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
113 9
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
4月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
59 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
95 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】