一、简介
基于matlab GUI界面BP网络之手写体大写字母识别
人工神经网络概述:
人工神经元模型:
神经网络的分类:
按照连接方式,可以分为:前向神经网络 vs. 反馈(递归)神经网络;
按照学习方式,可以分为:有导师学习神经网络 vs. 无导师学习神经网络;
按照实现功能,可以分为:拟合(回归)神经网络 vs. 分类神经网络。
数据归一化:将数据映射到[0, 1]或[-1, 1]区间或其他的区间。
数据归一化的原因:
1.输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。
2.数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小。
3.由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。例如神经网络的输出层若采用S形激活
函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。
4.S形激活函数在(0,1)区间以外区域很平缓,区分度太小。例如S形函数f(X)在参数a=1时,f(100)与f(5)只相差0.0067。
归一化算法:
1.y = ( x - min )/( max - min );
2.y = 2 * ( x - min ) / ( max - min ) - 1。
部分函数:
参数对BP神经网络性能的影响:
隐含层神经元节点个数
激活函数类型的选择
学习率
初始权值与阈值
交叉验证
训练集
测试集
验证集
留一法
二、源代码
-
%Example1 手写体大写字母识别
-
%形成用户界面
-
clear all;
-
%添加图形窗口
-
H=figure(
'Color',[
0.8
0.8
1],...
-
'position',[
400
300
500
400],...
-
'Name',
'基于BP神经网络的手写体大写字母识别',...
-
'NumberTitle',
'off',...
-
'MenuBar',
'none');
-
%画坐标轴对象,显示原始图像
-
h0=axes(
'position',[
0.1
0.6
0.3
0.3]);
-
%添加图像打开按钮
-
h1=uicontrol(H,
'Style',
'push',...
-
'Position',[
350
300
80
60],...
-
'String',
'选择图像',...
-
'FontSize',
14,...
-
'Call',
'op');
-
%画坐标轴对象,显示经过预处理之后的图像
-
%preprocess
-
p1=ones(
16,
16);
-
bw=im2bw(X,
0.5);
%转换成二值图像
-
%用矩形框截取图像
-
[i,j]=find(bw==
0);
-
imin=min(i);
-
imax=max(i);
-
jmin=min(j);
-
jmax=max(j);
-
bw1=bw(imin:imax,jmin:jmax);
三、运行结果
四、备注
完整代码或仿真咨询QQ1575304183
转载:https://blog.csdn.net/weixin_50197058/article/details/117386183