數學建模之BP神經網路

2021-08-23 14:16:39 字數 3926 閱讀 8507

bp網路是一種多層前饋神經網路,它的名字源於在網路訓練中,調整網路權值的訓練演算法是反向傳播演算法(即bp學習演算法).

bp網路是一種具有三層或者三層以上神經元的神經網路,包括輸入層,隱含層和輸出層,上下層之間實現全連線,而同一層的神經元之間無連線,輸入層神經元和隱含層神經元之間的是網路的權值,即兩個神經元之間的連線強度.隱含層或輸出層任一神經元將前一層所有神經元傳來的資訊進行整合,通常還會在整合的資訊中新增乙個閾值.當一對學習樣本提供給輸入神經元後,神經元的啟用值(該層神經元輸出值)從輸入層經過各隱含層向輸出層傳播,在輸出層的各神經元獲得網路的輸入響應,然後按照減少網路輸出與實際輸出樣本之間誤差的方向,從輸出層反向經過各隱含層回到輸入層,從而逐步修正各隱含權值,這種演算法稱為誤差反向傳播演算法,即bp演算法.

隨著這種誤差逆向傳播修正的反覆進行,網路對輸入模式的正確率也不斷上公升.bp演算法的核心是數學中的負梯度下降理論,即bp演算法總是沿著誤差下降最快的方向進行.

(1) 原始資料的輸入

(2) 資料歸一化

(3) 網路訓練

(4) 對原始資料進行**

(5) 將原始資料**的結果與已知樣本進行對比

(6) 對新資料進行**

clc                          % 清屏

clear all; %清除記憶體以便加快運算速度

close all; %關閉當前所有figure影象

%原始資料

%人數(單位:萬人)

sqrs=[20.55

22.44

25.37

27.13

29.45

30.10

30.96

34.06

36.42

38.09

39.13

39.99

...41.93

44.59

47.30

52.89

55.73

56.76

59.17

60.63];

%機動車數(單位:萬輛)

sqjdcs=[0.6

0.75

0.85

0.91.05

1.35

1.45

1.61.7

1.85

2.15

2.22.25

2.35

2.52.6

...2.7

2.85

2.95

3.1];

%公路面積(單位:萬平方公里)

sqglmj=[0.09

0.11

0.11

0.14

0.20

0.23

0.23

0.32

0.32

0.34

0.36

0.36

0.38

0.49

...0.56

0.59

0.59

0.67

0.69

0.79];

%公路客運量(單位:萬人)

glkyl=[5126

6217

7730

9145

10460

11387

12353

15750

18304

19836

21024

19490

20433

...22598

25107

33442

36836

40548

42927

43462];

%公路貨運量(單位:萬噸)

glhyl=[1237

1379

1385

1399

1663

1714

1834

4322

8132

8936

11099

11203

10524

11115

...13320

16762

18673

20724

20803

21804];

p=[sqrs;sqjdcs;sqglmj]; %輸入資料矩陣

t=[glkyl;glhyl]; %目標資料矩陣

%利用mapminmax函式對資料進行歸一化

[pn,input_str]=mapminmax(p);

[tn,output_str]=mapminmax(t);

%建立bp神經網路,相對舊一點的matlab版本,新版本中newff函式使用更簡潔一些

net=newff(pn,tn,[3

72],);

%10輪迴顯示一次結果

net.trainparam.show=10;

%學習速度為0.05

net.trainparam.lr=0.05;

%最大訓練次數為5000次

net.trainparam.epochs=5000;

%均方誤差

net.trainparam.goal=0.65*10^(-3);

%網路誤差如果連續6次迭代都沒有變化,訓練將自動終止(系統預設的)

%為了讓程式繼續執行,用以下命令取消這條設定

net.dividefcn='';

%開始訓練,其中pn,tn分別為輸入輸出樣本

net=train(net,pn,tn);

%利用訓練好的網路,基於原始資料對bp網路**

an=sim(net,pn);

%利用函式mapminmax把**得到的資料還原為原始的數量級

%新版本推薦訓練樣本歸一化和反歸一化都使用mapminmax函式

a=mapminmax('reverse',an,output_str);

%本例因樣本容量有限,使用訓練資料進行測試,通常必須用新鮮資料進行測試

x=1990:2009;

newk=a(1,:);

newh=a(2,:);

figure(2);

%繪製公路客運量對比圖

subplot(2,1,1);plot(x,newk,'k-o',x,glkyl,'b--+')

legend('網路輸出客運量','實際客運量');

xlabel('年份');

ylabel('客運量/萬人');

title('運用工具箱客運量學習和測試對比圖');

%繪製公路貨運量對比圖

subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+')

legend('網路輸出貨運量','實際貨運量');

xlabel('年份');ylabel('貨運量/萬噸');

title('運用工具箱貨運量學習和測試對比圖');

% 利用訓練好的網路進行**

%2023年和2023年的相關資料

% 當用訓練好的網路對新資料pnew進行**時,也應作相應的處理

pnew=[73.39

75.55

3.9635

4.0975

0.9880

1.0268];

%利用原始輸入資料的歸一化引數對新資料進行歸一化

%利用歸一化的資料進行**

anewn=sim(net,pnewn);

%把**得到的資料還原為原始的數量級

anew=mapminmax('reverse',anewn,output_str)

程式輸出:

參考: matlab在數學建模中的應用.

BP神經網路

基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...

BP神經網路

x 為輸入向量,y為隱藏層的神經元,z 為輸出層,d為目標真實值,本文預設 z 不經過sigmod處理。x y的權重為 w,y z的權重為 v yj ix iwij 1 oyi f y j 2 其中激勵函式f x 1 1 e x f x f x 1 f x 3 z k j f yj vjk 此時系統...

BP神經網路

bp是back propagation bp神經網路主要的演算法在於誤差反向傳播error backpropagation 有三層 輸入層 input 隱含層 hidden 輸出層 output 輸入層 n個神經元 隱含層 p個神經元 輸出層 q個神經元 輸入向量 x x1,x2,x n 隱含層輸入...