詳細BP神經網絡預測算法及實現過程實例


 

1.具體應用實例。根據表2,預測序號15的跳高成績。

表2 國內男子跳高運動員各項素質指標

序號

跳高成績()

30行進跑(s)

立定三級跳遠()

助跑摸高()

助跑4—6步跳高()

負重深蹲杠鈴()

杠鈴半蹲系數

100

(s)

抓舉

()

     1

2.24

3.2

9.6

3.45

2.15

140

2.8

11.0

50

2

2.33

3.2

10.3

3.75

2.2

120

3.4

10.9

70

3

2.24

3.0

9.0

3.5

2.2

140

3.5

11.4

50

4

2.32

3.2

10.3

3.65

2.2

150

2.8

10.8

80

5

2.2

3.2

10.1

3.5

2

80

1.5

11.3

50

6

2.27

3.4

10.0

3.4

2.15

130

3.2

11.5

60

7

2.2

3.2

9.6

3.55

2.1

130

3.5

11.8

65

8

2.26

3.0

9.0

3.5

2.1

100

1.8

11.3

40

9

2.2

3.2

9.6

3.55

2.1

130

3.5

11.8

65

10

2.24

3.2

9.2

3.5

2.1

140

2.5

11.0

50

11

2.24

3.2

9.5

3.4

2.15

115

2.8

11.9

50

12

2.2

3.9

9.0

3.1

2.0

80

2.2

13.0

50

13

2.2

3.1

9.5

3.6

2.1

90

2.7

11.1

70

14

2.35

3.2

9.7

3.45

2.15

130

4.6

10.85

70

15

 

3.0

9.3

3.3

2.05

100

2.8

11.2

50

 

4.4 (序號15)跳高成績預測

4.4.1 數據整理

1)我們將前14組國內男子跳高運動員各項素質指標作為輸入,即(30m行進跑,立定三級跳遠,助跑摸高,助跑4-6步跳高,負重深蹲杠鈴,杠鈴半蹲系數,100m,抓舉),將對應的跳高成績作為輸出。並用matlab自帶的premnmx()函數將這些數據歸一化處理。

數據集:(注意:每一列是一組輸入訓練集,行數代表輸入層神經元個數,列數輸入訓練集組數)

P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;

9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;

3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;

2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;

140 120 140 150 80 130 130 100 130 140 115 80 90 130;

2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;

11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;

50 70 50 80 50 60 65 40 65 50 50 50 70 70];

T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];

4.4.2 模型建立

4.4.2.1 BP網絡模型

    BP網絡(Back-ProPagation Network)又稱反向傳播神經網絡, 通過樣本數據的訓練,不斷修正網絡權值和閾值使誤差函數沿負梯度方向下降,逼近期望輸出。它是一種應用較為廣泛的神經網絡模型,多用於函數逼近、模型識別分類、數據壓縮和時間序列預測等。

 

BP網絡由輸入層、隱層和輸出層組成,隱層可以有一層或多層,圖2是m×k×n的三層BP網絡模型,網絡選用S型傳遞函數, 通過反傳誤差函數 ( (Ti為期望輸出、Oi為網絡的計算輸出),不斷調節網絡權值和閾值使誤差函數E達到極小。

BP網絡具有高度非線性和較強的泛化能力,但也存在收斂速度慢、迭代步數多、易於陷入局部極小和全局搜索能力差等缺點。可以先用遺傳算法對“BP網絡”進行優化在解析空間找出較好的搜索空間,再用BP網絡在較小的搜索空間內搜索最優解。

4.4.2.2 模型求解 

4.4.2.2.1 網絡結構設計

1) 輸入輸出層的設計

該模型由每組數據的各項素質指標作為輸入,以跳高成績作為輸出,所以輸入層的節點數為8,輸出層的節點數為1。

2) 隱層設計

有關研究表明, 有一個隱層的神經網絡, 只要隱節點足夠多, 就可以以任意精度逼近一個非線性函數。因此, 本文采用含有一個隱層的三層多輸入單輸出的BP網絡建立預測模型。在網絡設計過程中, 隱層神經元數的確定十分重要。隱層神經元個數過多, 會加大網絡計算量並容易產生過度擬合問題; 神經元個數過少, 則會影響網絡性能, 達不到預期效果。網絡中隱層神經元的數目與實際問題的復雜程度、輸入和輸出層的神經元數以及對期望誤差的設定有着直接的聯系。目前, 對於隱層中神經元數目的確定並沒有明確的公式, 只有一些經驗公式, 神經元個數的最終確定還是需要根據經驗和多次實驗來確定。本文在選取隱層神經元個數的問題上參照了以下的經驗公式:

其中, n為輸入層神經元個數, m 為輸出層神經元個數, a 為[ 1, 10]之間的常數。 

根據上式可以計算出神經元個數為4-13個之間,在本次實驗中選擇隱層神經元個數為6.

網絡結構示意圖如下:

 

4.4.2.2.2 激勵函數的選取

BP神經網絡通常采用Sigmoid可微函數和線性函數作為網絡的激勵函數。本文選擇S型正切函數tansig作為隱層神經元的激勵函數。而由於網絡的輸出歸一到[ -1, 1]范圍內, 因此預測模型選取S 型對數函數tansig作為輸出層神經元的激勵函數。

4.4.2.2.3 模型的實現

此次預測選用MATLAB中的神經網絡工具箱進行網絡的訓練, 預測模型的具體實現步驟如下:

將訓練樣本數據歸一化后輸入網絡, 設定網絡隱層和輸出層激勵函數分別為tansig和logsig函數, 網絡訓練函數為traingdx, 網絡性能函數為mse,隱層神經元數初設為6。設定網絡參數。網絡迭代次數epochs為5000次, 期望誤差goal為0.00000001, 學習速率lr為0. 01。設定完參數后, 開始訓練網絡。

該網絡通過24次重復學習達到期望誤差后則完成學習。詳細代碼見附錄。

網絡訓練完成后,只需要將各項素質指標輸入網絡即可得到預測數據。

預測結果為:2.20

 

matlab代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
?P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;
9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;
3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;
2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;
140 120 140 150 80 130 130 100 130 140 115 80 90 130;
2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;
11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;
50 70 50 80 50 60 65 40 65 50 50 50 70 70];
?T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];
?[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);
?%創建網絡
?net=newff(minmax(P),[8,6,1],{ 'tansig' , 'tansig' , 'purelin' }, 'trainlm' );
?%設置訓練次數
?net.trainParam.epochs = 5000;
?%設置收斂誤差
?net.trainParam.goal=0.0000001;
?%訓練網絡
?[net,tr]=train(net,p1,t1);
TRAINLM, Epoch 0/5000, MSE 0.533351/1e-007, Gradient 18.9079/1e-010
TRAINLM, Epoch 24/5000, MSE 8.81926e-008/1e-007, Gradient 0.0022922/1e-010
TRAINLM, Performance goal met.
 
?%輸入數據
?a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50];
?%將輸入數據歸一化
?a=premnmx(a);
?%放入到網絡輸出數據
?b=sim(net,a);
?%將得到的數據反歸一化得到預測數據
?c=postmnmx(b,mint,maxt);
?c
 
c =
 
     2.2003

https://www.cnblogs.com/sallybin/p/3169572.html轉自


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM