基于BP神经网络的手写数字识别(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

   在人工智能的影响下,机器学习和深度学习也重新掀起了一股热潮。目前人工智能包含语音识别、自然语音处理、计算机视觉、机器学习四大部分[1,2]。其中机器学习是人工智能发展最快的分支之一。

计算机技术和网络技术的发展,大量的数字信息在进行处理之前需要通过一定的方式采集到计算机之中,如信件上的邮政编码,银行各种票据上的数字信息,试卷上的准考证号,物流行业中手写快递单据等手写数字的录入等都可通过手写体数字识别技术来进行识别,提高效率,节省了人力。手写数字识别方法从原理上大致可以分为基于统计特征分类、基于结构特征分类、基于神经网络三大类算法[3.4]。笔者主要针对BP神经网络在手写数字识别方面的技术进行了matlab实现。

📚2 运行结果

部分代码:

function mytrain(trainSet,trainSet_d,validationSet,validationSet_d)
%MYTRAIN用于训练BP神经网络
global w1 w2 epochs goal max_fail sigma validation
fail = 0;     %当前失败次数
count = 0;      %当前迭代次数
sigma = zeros(1);    %训练集的误差
validation = zeros(1);    %验证集的误差
trainSet_N = size(trainSet,2);
validationSet_N = size(validationSet,2);

while count<epochs         %进行规定次数的迭代

%对全部样本进行遍历,更新权值
i=1;
while i<=trainSet_N
     input = trainSet(:,i);
     expect_d = trainSet_d(:,i);
     i=i+1;
     bp(input,expect_d);
end

count=count+1;     %迭代次数加1

%计算训练集的当前误差
hidden = w1*trainSet;
hidden = sigmf(hidden,[1 0]);
o = w2*hidden;
o = sigmf(o,[1 0]);
e = trainSet_d-o;
sum = 0;
for num = 1:trainSet_N
   E = e(:,num);
   sum = sum+E.'*E;
end
sigma(count) = sum/2;

%运行过程可视化
sprintf('第%d次迭代,误差为%f',count,sigma(count))

%判断是否已达到目标误差,若是,退出迭代过程
if sigma(count) <= goal 
    sprintf('Goal is reached!')
    break
end

%计算验证集误差
v_hidden = w1*validationSet;
v_hidden = sigmf(v_hidden,[1 0]);
v_o = w2*v_hidden;
v_o = sigmf(v_o,[1 0]);
v_e = validationSet_d-v_o;
v_sum = 0;
for v_num = 1:validationSet_N
    v_E = v_e(:,v_num);
    v_sum = v_sum+v_E.'*v_E;
end
validation(count) = v_sum/2;

%判断验证集误差是否连续上升
if count ~= 1
    if validation(count) > validation(count-1)
        fail = fail+1;
    else
        fail = 0;
    end
end

%备份验证误差上升前的权值
if fail == 0
    best_w1 = w1;
    best_w2 = w2;
end

%判断误差是否连续上升若干次迭代,若是则停止训练
if fail >= max_fail
    w1 = best_w1;
    w2 = best_w2;
    sprintf('Validation stop.')
    break
end

end

 

🎉3 参考文献

[1]许朋.基于BP神经网络的手写数字识别[J].科技视界,2020(11):51-53.DOI:10.19694/j.cnki.issn2095-2457.2020.11.019.

🌈4 Matlab代码实现

点击文章左下角【阅读全文】

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值