BP神經網路與MATLAB實現案例一
阿新 • • 發佈:2018-12-27
眾做周知,BP神經網路是最常用的一種神經網路。
本文主要講解%實現對玫瑰的識別%案例。
關於神經網路的介紹與BP的詳解,論壇裡鋪天蓋地,不在此贅述。
一.BP簡述
簡要概括一下:
- 一個輸入層、一個隱層、一個輸出層的神經網路足以應付大部分訓練
- BP的主要特點:訊號前向傳播,誤差反向傳播
- 激勵函式為取Sigmoid函式
- 大體流程:資料預處理、初始化網路、計算隱層輸出、得出輸出層輸出、計算誤差、更新連線權值、檢查迭代、模擬
二. 訓練過程(以識別玫瑰為例)
- 提取紅玫瑰(1)、粉玫瑰(2)、藍玫瑰(3)的外形(appearance),花瓣大小(petal),氣味(taste),綻放程度(bloom)整理成資料(英語隨便整的不要介意
- 歸一化資料、構造輸出矩陣、建立神經網路、設定引數、啟動訓練、反歸一化、模擬
- 其中最大迭代次數300、期望誤差0.01、學習效率0.01
- 輸出識別率:96.00%
迭代150次之後時基本穩定,結果很可觀
clc
clear
%讀取資料
[f1,f2,f3,f4,class] = textread('rose.txt' , '%f%f%f%f%f',150);
%歸一化
[input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]') ;
s = length( class ) ;
output = zeros( s , 3 ) ;
for i = 1 : s
output( i , class( i ) ) = 1 ;
end
%建立網路
net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ;
%設定訓練引數
net.trainparam.show = 50 ;
net.trainparam.epochs = 300;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;
net = train( net, input , output' ) ;
[t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);
testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;
Y = sim( net , testInput )
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
[m , Index] = max( Y( : , i ) ) ;
if( Index == c(i) )
hitNum = hitNum + 1 ;
end
end
sprintf('識別率是 %3.3f%%',100 * hitNum / s2 )