⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 neuralnetwork_bp_classification.asv

📁 模式识别的一个基础程序,手写数字模式识别,提供给大家分享
💻 ASV
字号:

clc
clear
close all

%---------------------------------------------------
% 产生训练样本,每一列为一个样本
P1 = [
     imread('0 (1).bmp') imread('0 (2).bmp') imread('0 (3).bmp') imread('0 (4).bmp') imread('0 (5).bmp') imread('0 (6).bmp') imread('0 (7).bmp') imread('0 (8).bmp') imread('0 (9).bmp') imread('0 (10).bmp')
     imread('1 (1).bmp') imread('1 (2).bmp') imread('1 (3).bmp') imread('1 (4).bmp') imread('1 (5).bmp') imread('1 (6).bmp') imread('1 (7).bmp') imread('1 (8).bmp') imread('1 (9).bmp') imread('1 (10).bmp')
     imread('2 (1).bmp') imread('2 (2).bmp') imread('2 (3).bmp') imread('2 (4).bmp') imread('2 (5).bmp') imread('2 (6).bmp') imread('2 (7).bmp') imread('2 (8).bmp') imread('2 (9).bmp') imread('2 (10).bmp')
     imread('3 (1).bmp') imread('3 (2).bmp') imread('3 (3).bmp') imread('3 (4).bmp') imread('3 (5).bmp') imread('3 (6).bmp') imread('3 (7).bmp') imread('3 (8).bmp') imread('3 (9).bmp') imread('3 (10).bmp')
     imread('4 (1).bmp') imread('4 (2).bmp') imread('4 (3).bmp') imread('4 (4).bmp') imread('4 (5).bmp') imread('4 (6).bmp') imread('4 (7).bmp') imread('4 (8).bmp') imread('4 (9).bmp') imread('4 (10).bmp')
     imread('5 (1).bmp') imread('5 (2).bmp') imread('5 (3).bmp') imread('5 (4).bmp') imread('5 (5).bmp') imread('5 (6).bmp') imread('5 (7).bmp') imread('5 (8).bmp') imread('5 (9).bmp') imread('5 (10).bmp')
     imread('6 (1).bmp') imread('6 (2).bmp') imread('6 (3).bmp') imread('6 (4).bmp') imread('6 (5).bmp') imread('6 (6).bmp') imread('6 (7).bmp') imread('6 (8).bmp') imread('6 (9).bmp') imread('6 (10).bmp')
     imread('7 (1).bmp') imread('7 (2).bmp') imread('7 (3).bmp') imread('7 (4).bmp') imread('7 (5).bmp') imread('7 (6).bmp') imread('7 (7).bmp') imread('7 (8).bmp') imread('7 (9).bmp') imread('7 (10).bmp')
     imread('8 (1).bmp') imread('8 (2).bmp') imread('8 (3).bmp') imread('8 (4).bmp') imread('8 (5).bmp') imread('8 (6).bmp') imread('8 (7).bmp') imread('8 (8).bmp') imread('8 (9).bmp') imread('8 (10).bmp')
     imread('9 (1).bmp') imread('9 (2).bmp') imread('9 (3).bmp') imread('9 (4).bmp') imread('9 (5).bmp') imread('9 (6).bmp') imread('9 (7).bmp') imread('9 (8).bmp') imread('9 (9).bmp') imread('9 (10).bmp')
     ];
P1 = rgb2gray(P1);
P1 = im2double(P1);
T1 = [0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9];
T1 = repmat(T1,1,10);

P2 = [imread('0 (1)t.bmp') imread('0 (2)t.bmp') imread('0 (3)t.bmp') imread('0 (4)t.bmp') imread('0 (5)t.bmp') imread('0 (6)t.bmp') imread('0 (7)t.bmp') imread('0 (8)t.bmp') imread('0 (9)t.bmp') imread('0 (10)t.bmp')
     imread('1 (1)t.bmp') imread('1 (2)t.bmp') imread('1 (3)t.bmp') imread('1 (4)t.bmp') imread('1 (5)t.bmp') imread('1 (6)t.bmp') imread('1 (7)t.bmp') imread('1 (8)t.bmp') imread('1 (9)t.bmp') imread('1 (10)t.bmp')
     imread('2 (1)t.bmp') imread('2 (2)t.bmp') imread('2 (3)t.bmp') imread('2 (4)t.bmp') imread('2 (5)t.bmp') imread('2 (6)t.bmp') imread('2 (7)t.bmp') imread('2 (8)t.bmp') imread('2 (9)t.bmp') imread('2 (10)t.bmp')
     imread('3 (1)t.bmp') imread('3 (2)t.bmp') imread('3 (3)t.bmp') imread('3 (4)t.bmp') imread('3 (5)t.bmp') imread('3 (6)t.bmp') imread('3 (7)t.bmp') imread('3 (8)t.bmp') imread('3 (9)t.bmp') imread('3 (10)t.bmp')
     imread('4 (1)t.bmp') imread('4 (2)t.bmp') imread('4 (3)t.bmp') imread('4 (4)t.bmp') imread('4 (5)t.bmp') imread('4 (6)t.bmp') imread('4 (7)t.bmp') imread('4 (8)t.bmp') imread('4 (9)t.bmp') imread('4 (10)t.bmp')
     imread('5 (1)t.bmp') imread('5 (2)t.bmp') imread('5 (3)t.bmp') imread('5 (4)t.bmp') imread('5 (5)t.bmp') imread('5 (6)t.bmp') imread('5 (7)t.bmp') imread('5 (8)t.bmp') imread('5 (9)t.bmp') imread('5 (10)t.bmp')
     imread('6 (1)t.bmp') imread('6 (2)t.bmp') imread('6 (3)t.bmp') imread('6 (4)t.bmp') imread('6 (5)t.bmp') imread('6 (6)t.bmp') imread('6 (7)t.bmp') imread('6 (8)t.bmp') imread('6 (9)t.bmp') imread('6 (10)t.bmp')
     imread('7 (1)t.bmp') imread('7 (2)t.bmp') imread('7 (3)t.bmp') imread('7 (4)t.bmp') imread('7 (5)t.bmp') imread('7 (6)t.bmp') imread('7 (7)t.bmp') imread('7 (8)t.bmp') imread('7 (9)t.bmp') imread('7 (10)t.bmp')
     imread('8 (1)t.bmp') imread('8 (2)t.bmp') imread('8 (3)t.bmp') imread('8 (4)t.bmp') imread('8 (5)t.bmp') imread('8 (6)t.bmp') imread('8 (7)t.bmp') imread('8 (8)t.bmp') imread('8 (9)t.bmp') imread('8 (10)t.bmp')
     imread('9 (1)t.bmp') imread('9 (2)t.bmp') imread('9 (3)t.bmp') imread('9 (4)t.bmp') imread('9 (5)t.bmp') imread('9 (6)t.bmp') imread('9 (7)t.bmp') imread('9 (8)t.bmp') imread('9 (9)t.bmp') imread('9 (10)t.bmp')
    ];
P2 = rgb2gray(P2);
P2 = im2double(P2);
T2 = [0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9];
T2 = repmat(T2,1,10);
          %repmat 产生m*n个矩阵a所组成的矩阵repmat(a,m,n)
%---------------------------------------------------
% 归一化

[PN1,minp,maxp] = premnmx(P1);
PN2 = tramnmx(P2,minp,maxp);

%---------------------------------------------------

% 设置网络参数

NodeNum = 16;                   % 隐层节点数 
TypeNum = 10;                    % 输出维数

TF1 = 'tansig';TF2 = 'purelin'; % 判别函数(缺省值)
%TF1 = 'tansig';TF2 = 'logsig';
%TF1 = 'logsig';TF2 = 'purelin';
%TF1 = 'tansig';TF2 = 'tansig';
%TF1 = 'logsig';TF2 = 'logsig';
%TF1 = 'purelin';TF2 = 'purelin';

net = newff(minmax(PN1),[NodeNum TypeNum],{TF1 TF2});

%---------------------------------------------------
% 指定训练参数

% net.trainFcn = 'traingd';  % 梯度下降算法
% net.trainFcn = 'traingdm'; % 动量梯度下降算法
% 
% net.trainFcn = 'traingda'; % 变学习率梯度下降算法
% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法 
%
% (大型网络的首选算法 - 模式识别)
% net.trainFcn = 'trainrp';  % RPROP(弹性BP)算法,内存需求最小 
% 
% 共轭梯度算法 
% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法
% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大
% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大
% (大型网络的首选算法 - 函数拟合,模式识别)
% net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多 
% 
% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快
% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大
% 
% (中小型网络的首选算法 - 函数拟合,模式识别)
net.trainFcn = 'trainlm';  % Levenberg-Marquardt算法,内存需求最大,收敛速度最快
%
% net.trainFcn = 'trainbr';  % 贝叶斯正则化算法
%
% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'

%---------------------%

net.trainParam.show = 1;          % 训练显示间隔
net.trainParam.lr = 0.3;            % 学习步长 - traingd,traingdm
net.trainParam.mc = 0.95;           % 动量项系数 - traingdm,traingdx
net.trainParam.mem_reduc = 10;      % 分块计算Hessian矩阵(仅对Levenberg-Marquardt算法有效)
net.trainParam.epochs = 1000;       % 最大训练次数
net.trainParam.goal = 1e-8;         % 最小均方误差
net.trainParam.min_grad = 1e-20;    % 最小梯度
net.trainParam.time = inf;          % 最大训练时间

%---------------------------------------------------
% 训练与测试

net = train(net,PN1,T1);             % 训练

%---------------------------------------------------
% 测试

Y1 = sim(net,PN1);             % 训练样本实际输出
Y2 = sim(net,PN2);             % 测试样本实际输出


%---------------------------------------------------
% 结果统计

Result = ~sum(abs(T1-Y1))                  % 正确分类显示为1
Percent1 = sum(Result)/length(Result)      % 训练样本正确分类率

Result = ~sum(abs(T2-Y2))                  % 正确分类显示为1
Percent2 = sum(Result)/length(Result)      % 测试样本正确分类率


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -