?? neuralnetwork_bp_classification.m
字號(hào):
% BP 神經(jīng)網(wǎng)絡(luò)用于模式分類(lèi)
% 使用平臺(tái) - Matlab6.5
clc
clear
close all
%---------------------------------------------------
% 產(chǎn)生訓(xùn)練樣本與測(cè)試樣本,每一列為一個(gè)樣本
P1 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
T1 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];
P2 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
T2 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];
%---------------------------------------------------
% 歸一化
[PN1,minp,maxp] = premnmx(P1);
PN2 = tramnmx(P2,minp,maxp);
%---------------------------------------------------
% 設(shè)置網(wǎng)絡(luò)參數(shù)
NodeNum = 10; % 隱層節(jié)點(diǎn)數(shù)
TypeNum = 3; % 輸出維數(shù)
TF1 = 'tansig';TF2 = 'purelin'; % 判別函數(shù)(缺省值)
%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});
%---------------------------------------------------
% 指定訓(xùn)練參數(shù)
% net.trainFcn = 'traingd'; % 梯度下降算法
% net.trainFcn = 'traingdm'; % 動(dòng)量梯度下降算法
%
% net.trainFcn = 'traingda'; % 變學(xué)習(xí)率梯度下降算法
% net.trainFcn = 'traingdx'; % 變學(xué)習(xí)率動(dòng)量梯度下降算法
%
% (大型網(wǎng)絡(luò)的首選算法 - 模式識(shí)別)
% net.trainFcn = 'trainrp'; % RPROP(彈性BP)算法,內(nèi)存需求最小
%
% 共軛梯度算法
% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法
% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,內(nèi)存需求比Fletcher-Reeves修正算法略大
% net.trainFcn = 'traincgb'; % Powell-Beal復(fù)位算法,內(nèi)存需求比Polak-Ribiere修正算法略大
% (大型網(wǎng)絡(luò)的首選算法 - 函數(shù)擬合,模式識(shí)別)
% net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,內(nèi)存需求與Fletcher-Reeves修正算法相同,計(jì)算量比上面三種算法都小很多
%
% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,計(jì)算量和內(nèi)存需求均比共軛梯度算法大,但收斂比較快
% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,計(jì)算量和內(nèi)存需求均比BFGS算法小,比共軛梯度算法略大
%
% (中小型網(wǎng)絡(luò)的首選算法 - 函數(shù)擬合,模式識(shí)別)
net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,內(nèi)存需求最大,收斂速度最快
%
% net.trainFcn = 'trainbr'; % 貝葉斯正則化算法
%
% 有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm'
%---------------------%
net.trainParam.show = 1; % 訓(xùn)練顯示間隔
net.trainParam.lr = 0.3; % 學(xué)習(xí)步長(zhǎng) - traingd,traingdm
net.trainParam.mc = 0.95; % 動(dòng)量項(xiàng)系數(shù) - traingdm,traingdx
net.trainParam.mem_reduc = 10; % 分塊計(jì)算Hessian矩陣(僅對(duì)Levenberg-Marquardt算法有效)
net.trainParam.epochs = 1000; % 最大訓(xùn)練次數(shù)
net.trainParam.goal = 1e-8; % 最小均方誤差
net.trainParam.min_grad = 1e-20; % 最小梯度
net.trainParam.time = inf; % 最大訓(xùn)練時(shí)間
%---------------------------------------------------
% 訓(xùn)練與測(cè)試
net = train(net,PN1,T1); % 訓(xùn)練
%---------------------------------------------------
% 測(cè)試
Y1 = sim(net,PN1); % 訓(xùn)練樣本實(shí)際輸出
Y2 = sim(net,PN2); % 測(cè)試樣本實(shí)際輸出
Y1 = full(compet(Y1)); % 競(jìng)爭(zhēng)輸出
Y2 = full(compet(Y2));
%---------------------------------------------------
% 結(jié)果統(tǒng)計(jì)
Result = ~sum(abs(T1-Y1)) % 正確分類(lèi)顯示為1
Percent1 = sum(Result)/length(Result) % 訓(xùn)練樣本正確分類(lèi)率
Result = ~sum(abs(T2-Y2)) % 正確分類(lèi)顯示為1
Percent2 = sum(Result)/length(Result) % 測(cè)試樣本正確分類(lèi)率
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -