1. 程式人生 > >BP神經網路與MATLAB實現案例一

BP神經網路與MATLAB實現案例一

眾做周知,BP神經網路是最常用的一種神經網路。
本文主要講解%實現對玫瑰的識別%案例。
關於神經網路的介紹與BP的詳解,論壇裡鋪天蓋地,不在此贅述。

一.BP簡述

這裡寫圖片描述

簡要概括一下:

  • 一個輸入層、一個隱層、一個輸出層的神經網路足以應付大部分訓練
  • BP的主要特點:訊號前向傳播,誤差反向傳播
  • 激勵函式為取Sigmoid函式
  • 大體流程:資料預處理、初始化網路、計算隱層輸出、得出輸出層輸出、計算誤差、更新連線權值、檢查迭代、模擬

二. 訓練過程(以識別玫瑰為例)

  1. 提取紅玫瑰(1)、粉玫瑰(2)、藍玫瑰(3)的外形(appearance),花瓣大小(petal),氣味(taste),綻放程度(bloom)整理成資料(英語隨便整的不要介意
    ),見下圖
  2. 歸一化資料、構造輸出矩陣、建立神經網路、設定引數、啟動訓練、反歸一化、模擬
  3. 其中最大迭代次數300、期望誤差0.01、學習效率0.01
  4. 輸出識別率: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 )