【手写数字识别】基于matlab GUI BP神经网络手写数字识别【含Matlab源码 1118期】

一、简介

1 概述
BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科研小组提出,拜见他们宣告在Nature上的论文 Learning representations by back-propagating errors梯度自愿和平行自愿的差异

BP公积金神经网络是一种按过错逆传达算法练习的多层前馈网络,是现在运用最广泛的神经网络模型之一。BP网梯度下降络能学习Go和存贮很多的 输google入-apple输出办法映射联络,而无需事前提示描绘这种映射联络的数学方程。它的学习规则是运用最速下降法,经过反向传达来不断 调整网络的权值和阈值,使网络的过错平方和最小。

2 BP算法的基本思想
上一次咱们说到,多层感知器在怎样获取隐层的权逆向思想事例100个值的问题逆向上遇到了瓶颈。已然咱们无法直接得到逆向思想练习500题隐层的权值,能否先经过输出层得到输出效果和希望输出的过错来直接调整隐层的权值呢?B梯度下降P算法便是选用这样的思想规划出来的算法,它的基本思想是,学习进程梯度下降法原理和过程由信号的正向传达与过错的反向传达两个进程组成。
正向传达时,输入样本从输入层传入,经各隐梯度下降法公式层逐层处理后,传向输出层。若输出层的实践输出与希望的输出(教师信号)不符,则转入过错的反向传达阶段。
反向传达时,将输出以某种办法经过隐层向输入梯度下降法公式层逐层反传,并将过错分摊给各层的悉数单元,然后取梯度得各层单元的过错信号,此过错信号即作为修正各单元权值的依据。
这两个进程的详细流程会在后文介绍。

BP算法的信号流向图如下图所示
【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】
3 BP网络appetite特性剖析——BP工程造价三要素
咱们剖析一个ANN时,一般都是从它的梯度下降算法是最常用也是最有用三要素下手,即
1)网络拓扑结构;
2)传递函数;
3)学习算法。
【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】

每一个要素的特性加起来就决议了这个ANN梯度下降法原理和过程的功用特性。所以,咱们也从这三要素下手对BP网络的研讨。
3.1 BP网络的拓扑结构
上一次现已说了,BP网络实践上便是多层感知器,因而它的拓扑结构和多层感知器的拓扑龚俊结构相同。因为单隐层(三层)感知器现已可以处理简略的非线性问题,因而运用最为广泛。三层感知器的拓扑结构如下图所示。逆向挑选
一个最简略的三层BP:
【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】
3.2 BP网络的传递函数
BP网络选用的传递函数是非线性变换函数——Sigmoid函数(又称S函数)。枸杞其特点是函数自身及其导数都是接连的,因而在处理上非常便当。为什么要选龚俊择这个函数,等下在介绍BP网络的学习算法的时分会进行进一步的介绍。
单极性S型函数曲梯度自愿线如下图所示。
【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】
双极性S型函数曲线如下图所示。
【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】
3.3 BP网络的学习算法
BP网络的学习算法就逆向成长是BP算法,又名 算法(在ANN的学习进程中咱们会发现不少具有多个称谓的术语梯度下降法原理和过程), 以三层感知器为例,当网络输出与希望输app是什么意思出不等时,存在输出过错 E ,界说如下
【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】
下面咱们会介绍BP网络的学习练习梯度下降法原理的详细进程。

4 BP网络的练习分解
练习一个BP神经网络,实践上便是调整网络的权重和偏置这两个参数,BP神经网络的操逆向思想的比如练进程分两部分:

前向传输,逐层波浪式的梯度是什么意思传递输出值;
逆向反响,反向逐层调整权重和偏置;
咱们先来看前向传输。
前向传输(Feed-Forward前向反响)
在练习网络之前,咱们需求随机初始化权重和偏置,对每一个权重取[逆向思想事例100个 − 1 , 1 ] [-1,1][−1,1]的一个随机实数,每一个偏置取[ 0 , 1 ] [0,梯度怎样求1][0,1]的一个随机实数,之后就开始进行前向传输。

神经网络的练习是由多趟迭代完毕的,每一趟迭代都运用梯度下降法例题练习集的悉数记载,而每一次练习网络只运用一条记载,笼统的描绘如下:

while 连续条件未满足:
for record:dataset:
trainModel(record)

【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】
4.1 逆向反响(Backproapplicationpagatioappointmentn)
【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】
4.2 练习连续条件
每一轮练习都运用梯度下降法原理和过程数据集的悉数记载,但什么时分连续,连续条件有下面两种逆向成长
设置最大迭代次数,比如运用数据集迭代100次后连续练习
核算练习集在网络上的猜想准确率,抵达必定门限值后连续练习

5 BP网络工作的具google体流程
5.1 网络结构
输入层有n nn个神经元,隐含层有p pp个神经元,输出层有q qq个神经元。
5.2 变量界说
【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】
第九步:判别模型合理性
判别网络过错是否满足要求。
当过错抵达预设精度或许学习次数大于规划的最大次数,则完毕算法。
不然,选逆向挑选取下一个学习样本以及对应的输出希望,返回梯度下降法原理和过程第三部,approach进入下一轮学习。

6 BP网络的规划
在进行B龚俊P网络的规划梯度下降法求最小值是,一般应从网络的层数、每层中的神经元个数和激活函数、初始值以及学习速率等几个方面来进行考虑,下面是一些选取的准则。
6.1 网络的层数
理论现已证明,枸杞具有逆向工程误差和至少一个S型隐层加上一个线性输出层的网络,可以迫临任何有理函数,添加层数可以进一步下降过错,行进精度,但一同也是网络 凌乱化。其他不能用仅具有非线性激活函数的单层网络来处理问题,因为能用单层网络处理的问题,用自适应线性网络也必定能处理,而且自适应线性网络的 运算速度更快,而关于只能用非线性函数处理的问题,单逆向挑选层精度又不够高,也只有添加层数才干google抵达希望的作梯度下降算法的正确过程用。
6.2 隐层神经元的个数
网络练习精度app是什么意思的行进,可以经过选用一个逆向思想事例100个隐含层,而添加其神经元个数的办法来梯度下降法公式取得,这app是什么意思在结构完成上要比添加网络层数简略得多。一般来说,咱们用精度和 练习网络的时刻梯度下降法来恒量一个神经网络规划的好坏:
(1)神经元数太少时,网络不能很好的学习,练习迭代的次数也比较多,练习精度也不高。
(2)神经元数太多时,网络的功用越强健,精确度也更高,练习迭代的次数也大,或许会呈现过拟合(o逆向思想的比如ver fitting)现象。
由此,咱们得到神经网络隐层神经元个数的选取准则是:在可以处理问题的前提下,再加上一两个神经元,以加速过错下降速度即可工商银行

6.3 初始权值的选取
一般初始权值是取值梯度在(−1,1)之间的随机数。其他威得罗等人在剖析了两层网络是怎样对一个函数进行练习后,提出挑选初始权值量级为s√r的战略, 其间r逆向思想的比如为输入个数,s为第一层梯度下降法求最小值神经元个数。

6.4 学习appointment速率
学习速率一般选逆向行驶怎样处分2021取为0.01−0.8,大的学习速率或许导致系统的不稳定,但小的学习速率导致收敛太慢,需求较长的练习时刻。关于较凌乱的网络, 在过错曲面的不同位置或许需求不同的梯度下降法公式学习速率,为了削减寻觅学习速率的练习次数及时刻,比较适梯度下降法原理和过程合的办法是选用改动的自适应学appetite习速率,使网络在 不同的阶段设置不同巨细的学习速率。

6.5 希望过错的选取
在规划网络的进程中,希望过错值也应当经过appointment对比练习后承认一个合适的值,这个合适的值是相关于所需求的逆向挑选隐层节点数来承认的。一般情况下,可以一同对两个不同 的希望过错值的网络进行练习,最终经过逆向思想综合因从来承认其间一个网络。

7 BP网络的局限性
BP网络具有以下的几个问题:

(1)需求较长的练习时刻:这首要是因为学习速率太小所构成的,可选用改动的或自适应的学习速率来加以改梯度下降法进。
(2)彻底不能练习:这首要表现在网络的麻木上,一般为了防止这种逆向情况的产生,一是选取较小的初始权值,而是选用较小的学习速率。
(3梯度怎样求)部分最小值:这里选用的梯度approach下降法或许收敛到部分最小值,选用多层网络或较多的神经元,有或许得到更好的效果。

8 BP网络的改善
P算法改善的首要目标是加速练习速度,防止堕入部分极小值等,常见的改善办法有带动量因子算Go法、自适应学习速率、改动的学习速率以及作梯度自愿和平行自愿的差异用函数后appreciate缩法等。 动量因子法的基本思想是在反向传达的基础上,在每一Go个权值的改动上加上一项正比于前次权值改动的值,并依据反向梯度下降法原理和过程传达法来产生新的权google值改动。而自适应学习 速率的办法则是针对一些特定的问题的。改动学习速率的梯度下降算法推导办法的准则是,若接连几次迭代梯度洗脱中,若目标函数对某个权倒数的梯度自愿是什么意思符号梯度自愿相同,则这个权的学习appointment速率添加, 反之若符号相反则减小它的学习梯度洗脱速率。而效果函数后缩法则是将效果函数进行平移,即加上一个常数。

二、源代码

function varargout = findimg(varargin)
% FINDIMG MATLAB code for findimg.fig
%      F逆向思想练习500题INDIMG, by itsappleelf, creates a new FINDIMG or raises the existing
%      singleton*.逆向思想的比如
%
%      H = FINDIMG returns the handle to a new FINDIMG or the handle to
%梯度下降算法是最常用也是最有用      the existing singleton*.
%
%      FINDIMG('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBAC逆向思想练习500题K i梯度下降算法是最常用也是最有用n FINDIMG.M with the given input arguments.
%
%      FI逆向思想事例100个NDIMG('Property','Value',...) cr梯度下降算法是最常用也是最有用eates a new FINDIMG or raises the
%      existing宫颈癌 singleton*.  Starting fromappointment the left, property value pairs are
%      appliappearanceed to the GUI before findimg_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property applicaapproachtion
%      stop.  All inputs are passed to findimg_OpeningFcn via varargin.
%
%      *See GUI Options o梯度下降算法是最常用也是最有用n GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help findimg
% Last Modified by GUIDE v2.5 23-Apr-2021 16:06:05
% Begin initialization code - DO NOT EDIT
gui_Singleton宫颈癌早期症状 = 1;
gui_State = struct('gui_Name',       mf梯度下降法原理ilename, ...
'gui_Singleton',  gui_Singleton, ...
'gui_OpeningFcn', @findimg_OpeningFcn, ..google.
'gui_OutputFcn',  @findi梯度下降算法推导mg_OutputFcn, ...
'gui_LayoutFcn',  [] , ...
'gui_Callback',   []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback逆向思想的比如 = str2func(varargin{1});
end
if nargout
[varargout{1:nargout梯度自愿和平行自愿的差异}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui工商银行_State, varargin{:});
end
% End ini工程造价tia梯度下降法求最小值liza梯度下降算法是最常用也是最有用tion code - DO NOT梯度下降算法的正确过程 EDIT
% --- Executes just before findimg is made visible.
function findimg_OpeningFcn(hObject, eventdata, han逆向思想的比如dles, varargin)
% This function has no outpu梯度下降法t args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of M狗狗币ATLAB
% handles    structure with handles and user data (see GUIDATA)
% var梯度下降法原理和过程argin   command line arguments to findimggoogle (see VARARGIN)
% Choose default command line output for findimg
handles.output = hObject;
% Update handl梯度grad公式es structure
guidata龚俊(hObject, handles);
% UIWAIT makes findimg waiappstoret for user response (see UI梯度下降法公式RESUME)
% uiwait(handles.figure1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%工商银行%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%界说全局变量
global ButtonDown pos1;
ButtonDown = [];
pos1 = [];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% --- Outputs from this function are returned to the command line.
function varargout = findimgappointment_Outpu梯度下降法例题tFcn(hObject, e梯度怎样求ventdata, handles)
% varargout  cell array for returniappetiteng out梯度洗脱put args (see VARARGOUT);
% hObject    handle to figure
% event工商管理data  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (公积金see GUIDATA)
% Get defaul梯度怎样求t command line output from handles structure
varargout{1} = handles.output;
axi逆向工程s([0 250 0 250]);
% --- Executes during object creation, after setting all properties.
function axes1_CreateFcn(hObject, eventdata, handles)
% hObject    h逆向挑选andle to axes1 (see GCBO)
% eventdata  reseapp是什么意思rved - tappetiteo be defined in梯度怎样求 a future version of MATLAB
% handles    empty - handles not created until after all梯度自愿 CreateFcns called
% Hint: place c梯度自愿和平行自愿的差异ode in OpeningFcn toappointment populate axes1
%吊销闪现axes的坐app是什么意思标轴
set((hObject),'xTick',[]);
set((hObject),'yTick',[]);
% --- Ex梯度自愿ecutes on button press in pushbutton1.
function pushbut梯度grad公式ton1_Callback(hObject, eventdata, handles)
% hObject    han梯度dle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[f,p]=uiputfile({'*.jpg'},'保存文件'梯度grad公式);  %保存所画的图
str=strcat(p,f);
pix=getframe(handles.axes1);
imwr龚俊ite(pix.cdata,str,'jpg')
% --- Executes on button prapp是什么意思ess in pushbutton2.
function pushbuttoappearn2_Callback(hObject, eventdata, handles)
% hObject    handle to p逆向成长ushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure宫颈癌早期症状 with handles and user data (see GUIDATA)
cla(happroachandles梯度grad核算公式.axes1);   %清楚axes中所狗狗币画的图像
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObj逆向行驶怎样处分2021ect, eventdata, handles)
% hObject    handle to push梯度button3 (see GCBO)
%梯度grad核算公式 eventdata  reserved - to be defined in a future version of MATLAB
% handle梯度下降法求最小值s    struc梯度下降法公式ture with handles and user梯度 data (see GUIDATA)
pix=applegetframe(handles.axes1);
imwrite(pix.cdata,'imgt梯度est.jpg');
newimage = imread('imgtest.jpg');           %保存新画梯度下降算法推导的数字
newimgResult = identify(newimage) ;                  %经过辨认函数进行比较
Result = BpRecognize(newimgResult);
msgbox(num2str(Result),'辨认效果','hel梯度下降法求最小值p')梯度公式;
% --- Executes o梯度n button press in pushbutton4.
function pushbutton4_Callback(hObje梯度自愿ct, eventdata, handles)
% hObject    handle t逆向o pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user dat工商管理a (see GUIDATA)
BpTrain();
msgbox('Finish Train','提示','m梯度洗脱odal'梯度下降法);
% --- Executes on mou梯度下降算法推导se press over figure background, over a disabled or
% --- inactive control, or over an axes background.
function figure梯度grad公式1_WindowButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to figure1 (see GCBO)
% eventdata  reserved - to be defineGod in a futu逆向思想re version of MATLAB
% h梯度下降算法推导andles    structure with handles and user data (see GUIDATA)
%鼠标按下作业
global梯度下降法原理和过程 ButtonDown pos1;
if(strcmp(get(gcf,'Selecti梯度自愿和平行自愿的差异onType'),'normal'))%判别鼠appear标按下的类型,no龚俊rmal为左键
Butt工商银行onDown=1;
pos1=get(handles.axes1,'CurrentPoint');%获取坐标轴梯度怎样求上鼠标的位置
end
function [] = BpTrain()
%UNTITLED5 Summary of this function goes here
%   Detailed explanation goes here
clear all;
clc
ctime = datestr(now, 30);%取系统时刻
tseed = str2num梯度下降法例题(ctime((end - 5) : end)) ;%将时刻字符转换为数字
rand('s梯度下降eed', tseed) ;%设置种子,若不设置种子则可取到伪随机数
load Data2;  %数据有10类数据,每类2025列,有4列是标签。共200*29
c = 0;
data = [];
for i = 1:10
for j = 1:20
c = c + 1;
data(c,:) = pattern(i).feature(j,:);
end
end
%=============练习数据=============
Data = data(1:20, 1:25);
Data = [ Data ; data(21:40, 1:25)];
Data = [ Data ; data(41:60, 1:25)逆向行驶怎样处分2021];
Data = [ Data ; data(61:80, 1:25)];
Data = [ Data ; data(81:100, 1:25)];
Data = [ Data ; data(101:120, 1:25)梯度下降法matlab];
Data = [ Data ; data(121:140, 1:25)];
Data = [ Data ; data(141:160, 1:25)];
Data = [ Data ; data(161:180, 1:25)];
Data梯度grad核算公式 = [ Data ; data(181:200, 1:25)];
%0标签
Data(1:2龚俊0, 26)   = 0;
Data(1:20, 27)   = 0;
Data(1:20, 28)   = 0;
Data(1approach:20, 29apple)   = 0;
%1标签
Data(21:40, 26)   = 0;
Data(21:40, 27)   = 0;
Data(21:40, 28)   = 0;
Data(21:40, 29)   = 1;梯度grad公式
Data(41:60, 26)   = 0;
Data(41:60, 27)   = 0;
Data(41:梯度自愿是什么意思60, 28)   = 1;
Data(41:60,梯度grad核算公式 29)   = 0;
Data(61:80, 26)   = 0;
Data(61:80, 27)   = 0;
Data(61:80, 28)   = 1;
Data(61:80, 29)   = 1;
Data(81:100, 26)   = 0;
Data(81:100, 27)   = 1;
Data(81:100, 28)   = 0;
Data(81:100, 29)   = 0;
Data(101:120, 26)   = 0;
Data(101:120, 27)   =梯度洗脱 1;
Data(101:120, 28)   = 0;
Data(101:120, 29)   = 1;
Data(121:140, 26)   = 0;狗狗币
Data(appear121:14app是什么意思0, 27)   =梯度下降 1;
Datapplea(121:140, 28)   = 1;
Data(1application21:140, 29)   = 0;
Data(141逆向思想的比如:160, 26)   = 0;
Data(141:160, 27)   = 1;
Data(141:160, 28)   = 1;
Data(141:160, 29)   = 1;
Data(161:180, 26)   = 1;
Data(161:180, 27)   = 0;
Data(161:1appreciate80, 28)   = 0;
Data(161梯度下降算法推导:180, 29)   = 0;
Data(181:200, 26)   = 1;
Data(181:200, 27)   = 0;
Data(181:2梯度下降法00, 2梯度下降法8)   = 0;
Data(181:200, 29)   = 1;
DN = size(Data, 1);
%输入层结点数
S1N = 25;
%第二工程造价层结点数
S2N = 50;
%输出层结点数
S3N = 4;
%学习率
sk = 0.5;
%随机初始化各层的W和B
W2 = -1 + 2 .* ranappointmentd(S2N, S1N);
B2 = -1 + 2 .*逆向思想事例100个 rand(S2N, 1);
W3 = -1 + 2 .* rand(S3N, S2N);
B3 = -逆向思想的比如1 + 2 .* rand(S3N, 1);
%数据样本下标
di = 1;
for i=1:50000
%第三层输出apple
n3 = W3 * a2 + B3;
a3 = Logsig(n3);   %第三层传输函数为logsig
%核算输出层过错
e  = t - a梯度自愿和平行自愿的差异3;
err = (e') * e;
Fd3 = diag((1 - a3) .* a3);
S3 = -2 * Fd3 * e;
F公积金d2 = diag((1 - a2) .* a2);
S2 = Fd2 * (W3') * S3;
W3 = W3 - sk*S3*(a2'); %梯度下降步长
B3 = B3 - sk*S3;
W2 = W2 - sk*S2*(a1');
B2 = B2 - sk*S2;
end
msgbox(梯度grad公式num2str(err),'输出层过错','help');
save('W2.mat','W2');
sa逆向行驶扣几分罚款多少钱ve('W3.mat','W3');
save('B2.mat','B2');
save('B3.mat','B3');
end

三、工作效果

【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】【手写数字辨认】依据matlab GUI BP神经网络手写数字辨认【含Matlab源码 1118期】

四、补白

版别:2014a

发表评论

提供最优质的资源集合

立即查看 了解详情