MATLAB神經網路(二):BP非線性建模

在工程應用中經常會遇到一些複雜的非線性系統,這些系統狀態方程複雜,難以用數學方法準確建模。在這種情況下,可以建立BP神經網路表達這些非線性系統。該方法把未知系統看成是一個黑箱,首先用系統輸入輸出數據訓練BP神經網路,使網路能夠表達該未知函數,然後就可以用訓練好的BP神經網路預測同輸出。本章擬合的非線性函數為

y=x_1^2+x_2^2

基於BP神經網路的非線性函數擬合演算法流程可以分為BP神經網路構建、訓練和預測三步。

由於該非線性函數有兩個輸入參數,一個輸出參數,所以BP神經網路結構為2-5-1,即輸入層有2個節點,隱含層有5個節點,輸出層有1個節點。從非線性函數中隨機得到2000組輸入輸出數據,從中隨機選擇1900組作為訓練數據,用於網路訓練,100組作為測試數據,用於測試網路的擬合性能。

MATLAB中包含神經網路工具箱。目前包括網路有感知器、線性網路、BP神經網路、徑向基網路、自組織網路和回歸網路等。主要用到newff,sim和train3個函數。

  1. newff:神經網路參數設置函數

    net=newff(P,T,S,TF,BTF,PF,IPF,OPF,DDF)

    P:輸入數據矩陣。 T:輸出數據矩陣。 S:隱含層節點數。 TF:節點傳遞函數

    BTF:訓練函數,包括梯度下降BP演算法訓練函數traingd, 動量反傳的梯度下降BP演算法traingdm,動態自適應學習率的梯度下降BP演算法訓練函數traingda, 動量反傳和動態自適應學習率的梯度下降BP演算法訓練函數traingdx, Levenberg_Marquardt的BP演算法訓練函數trainlm。

    BLF:網路學習函數

    PF:性能分析函數,包括均值絕對誤差mae,均方差mse。

    IPF:輸入處理函數,OPF:輸出處理函數,DDF:驗證數據劃分函數
  2. train:BP神經網路訓練函數

    [net,tr]=train(NET, X,T,Pi, Ai)

    NET:待訓練網路。X:輸入數據矩陣。T:輸出數據矩陣。

    Pi:初始化輸入層條件。Ai:初始化輸出層條件。

    net:訓練好的網路。tr:訓練過程記錄

3. sim:BP神經網路預測函數

y=sim(net,x)

x:輸入數據。y:網路預測數據。

數據歸一化

load data input outputnk=rand(1,2000);n[m,n]=sort(k);ninput_train=input(n(1:1900),:);noutput_train=output(n(1:1900),:);ninput_test=input(n(1901:2000),:);noutput_test=output(n(1901:2000),:);n[inputn,inputps]=mapminmax(input_train);n[outputn,outputps]=mapminmax(output_train);n%BP神經網路構建nnet=newff(inputn,outputn,5);n%網路參數配置(迭代次數,學習率,目標)nnet.trainParam.epochs=100;nnet.trainParam.lr=0.1;nnet.trainParam.goal=0.00004;nn%神經網路訓練nnet=train(net,inputn,outputn);nn%預測輸入數據歸一化ninputn_test=mapminmax(apply,input_test,inputps);n%神經網路預測輸出nan=sim(net,inputn_test);n%輸出反歸一化nBPoutput=mapminmax(reverse,an,outputps);nn%網路預測結果圖形nfigure(1)nplot(BPoutput,:og)nhold onnplot(output_test,-*)nlegend(預測輸出,期望輸出)ntitle(BP網路預測輸出,fontsize,12)nylabel(函數輸出,fontsize,12)nxlabel(樣本,fontsize,12)nn%網路預測誤差圖形nfigure(2)nplot(error,-*)ntitle(BP預測誤差,fontsize,12)nylabel(誤差,fontsize,12)nylabel(樣本,fontsize,12)n

節點轉移函數

MATLAB神經網路工具箱中newff函數提供了幾種節點轉移函數,主要包括:

1) logsig函數

y=1/[1-exp(-x)]

2)tansig函數

y=2/[1-exp(-2x)]-1

3)purelin函數

y=x

隱含層和輸出層函數的選擇對BP神經網路預測精度有較大影響。一般隱含層節點轉移函數用logsig或tansig,輸出層節點轉移函數用tansig或purelin。


推薦閱讀:

【神經網路】激活函數面面觀
Tensorflow實現深層學習完備流程
第五周筆記:神經網路分類問題應用
Tensorflow新手通過PlayGround可視化初識神經網路

TAG:MATLAB | 神经网络 | 预测 |