1. 程式人生 > >利用MATLAB工具箱學習BP神經網絡

利用MATLAB工具箱學習BP神經網絡

3.1 設定 標準 事先 單位 4.0 參數 cor 限制

BP神經網絡:BP網絡(Back Propagation)是一種按誤差逆傳播算法訓練的多層前饋網絡,是目前應用最廣泛的神經網絡模型之一,是1986年由Rumelhart和McCelland為首的科學家小組提出。BP網絡能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。

第1章 神經網絡

1.1 生物神經網絡的主要結構結構和類比

細胞體:神經元的主體;

樹突:細胞體向外延伸的神經纖維,接受來自其他神經元的消息,相當於輸入端

軸突:細胞體向外延伸出的最長的一條神經纖維,相當於輸出端

突觸:神經元通過軸突末梢和其它神經元進行信號連接,相當於輸入和輸出接口

1.2 人工神經元模型

人工神經元模型(Artificial Neural Networks,ANNs),也叫做神經網絡(NNs),是一種模擬生物神經網絡進行信息處理的一種數學模型。人工神經元是其基本信息處理單元,類似於生物神經網絡和生物神經元關系,簡而言之神經網絡就是一種仿生。

1.3 人工神經網絡的分類

1.3.1 分層網絡

一般有輸入層、隱含層(中間層)和輸出層,各層級順次連接。

分層網絡又分為3類:
(1)單純的前向型網絡:可以用有向無環結構表示,輸入層經過中間層模式變換,由輸出層輸出一個輸出模式,這樣便完成了一次網絡狀態的更新,單純的前向型網絡結構見下圖(圖以三個輸入和三個輸出為例)。

技術分享圖片

(2)具有反饋的前向型網絡:在單純前向型網絡的基礎上,加上反饋機制,即有環結構,具有反饋的單元稱為隱單元,反饋前向型網絡結構見下圖(圖以三個輸入和三個輸出為例)。

技術分享圖片

(3)層內互聯的前向型網絡:在單純前向型網絡的基礎上,同一層級內的單元相互連接,可以限制同級內的激活單元數目,層內互聯的前向型網絡見下圖(圖以三個輸入和三個輸出為例)。

技術分享圖片

1.3.2 相互連接型網絡

互聯網絡分為兩類:局部互聯和全互聯。局部互聯就是網絡中每個單元輸出並沒有全和其它神經元相連;全互聯是每個單元的輸出都和其它神經元相。對於一般簡單的前向神經網絡,給定輸入,可以快速給出輸出;而相互連接的神經網絡對於給定的輸入。全互聯網絡結構見下圖(圖以三個輸入和三個輸出為例)。

技術分享圖片

1.4 神經元的數學模型

神經元的數學模型表達式:

:輸入或輸出的延時;

:神經元j的閾值;

:神經元i到j的權值,與時間無關,具有非時變性,正負取值代表興奮和抑制;

f() :神經元變換函數;

若上式中延時取單位延時,則可寫為:

1.5 神經網絡的學習方式

監督學習:事先給定標準樣本,如反傳網絡、感知器等;

非監督學習:事先不給定標準樣本,如Hebb學習規則等;

第2部分 BP神經網絡

  1 %% BP神經網絡 
  2 
  3 %% 第1部分 BP提供了兩個函數實現創建,  
  4 %% 1.1 newcf函數  調用格式: net = newcf(PR,[S1,S2...SN],{TF1,TF2...TFN},BTF,BLF,PF)
  5 %%      PR:每組輸入(共有R組輸入)元素的最大值和最小值組成的R*2維的矩陣;
  6 %%      Si:第i層的長度;
  7 %%      TFi:各層的傳遞函數;
  8 %%      BTF:BP網絡的訓練函數,默認值為"trainlm"
  9 %%      BLF:權值和閾值的學習算法,默認值"learngdm";
 10 %%      PF:網絡的性能函數,默認值"mse";
 11 %% 1.2 newff函數   調用格式: net = newff(PR,[S1,S2...SN],{TF1,TF2...TFN},BTF,BLF,PF)
 12 %%              參數含義同newcf函數;
 13 %% 案例:創建一個BP網絡;
 14 clear all;
 15 X = [1 2; 2 3];             %輸入訓練集
 16 T = [1 2;2 1];              %目標集
 17 net = newff(X,T,5);         %建立BP網絡
 18 net = train(net,X,T);       %網絡訓練
 19 X1 = X;
 20 disp(‘輸出網絡仿真數據‘);
 21 y = sim(net,X1);
 22 
 23 %% 第2部分 傳遞函數
 24 %% 2.1 logsig函數:對數S型函數傳遞曲線,  調用格式: A = logsig(N,FP)
 25 %%      N:S*Q維的網絡輸入向量矩陣;
 26 %%      FP:性能參數,可忽略;
 27 %%  dA_dN = logsig(‘dn‘,N,A,FP);
 28 %%      返回A關於N的導數dA_dN,如果A或FP沒有給出或空矩陣,則FP返回默認參數;
 29 %%  info = logsig(‘code‘);
 30 %%     若   code = name,返回傳遞函數的全稱; 
 31 %%          code=output,返回輸出值域;
 32 %%          code=active,返回有效的輸入區間;
 33 %%          code=fullderiv,返回導數的次數;
 34 %%          code=fpnames,返回函數參數的名稱;
 35 %%          code=fpdefaults,返回默認的函數參數;
 36 %% 案例:繪制一個對數S型函數傳遞曲線;
 37 clear all;
 38 n = -5:0.1:5;
 39 a = logsig(n);
 40 plot(n,a);
 41 grid on;
 42 xlabel(‘輸入數據‘);
 43 ylabel(‘對數S型傳遞曲線‘);
 44 
 45 
 46 %% 2.2 tansig函數:雙曲正切S型傳遞函數, 調用格式: A = tansig(N,PF)
 47 %%      N:S*Q維的網絡輸入向量矩陣;
 48 %%      PF:性能參數,可忽略;
 49 %% 案例: 繪制一個雙曲正切S型傳遞函數
 50 clear all;
 51 n =-5:0.1:5;
 52 a =tansig(n);
 53 plot(n,a);
 54 grid on ;                   %畫網格
 55 xlabel(‘輸入數據‘);                 
 56 ylabel(‘雙曲正切S型傳遞函數‘);
 57 
 58 
 59 %% 第3部分 BP學習函數
 60 %%  3.1 learngd函數:梯度下降權值/閾值學習函數,它通過神經網絡的輸入和誤差,以及權值和閾值的學習速率來計算權值或閾值的變化率;
 61 %%  調用格式:[dW,LS] = learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
 62 %% info = learngd(‘code‘)
 63 %%      若  code=pnames,返回設置的學習參數;
 64 %%          code=pdefaults,返回默認的學習參數;
 65 %%          code=needg,如果函數使用了解gW或gA,則返回1;
 66 %%      W;S*R維的權值矩陣;
 67 %%      P:Q組R維的輸入向量;
 68 %%      Z:Q組S維的加權輸入向量;
 69 %%      N:Q組S維的輸入向量;
 70 %%      A:Q組S維的輸出向量;
 71 %%      T:Q組S維的層目標向量;
 72 %%      E:Q組S維的層誤差向量;
 73 %%      gW;與性能相關的S*R維梯度;
 74 %%      gA:與性能相關的S*R維輸出梯度;
 75 %%      D:S*S維的神經元距離矩陣;
 76 %%      LP:學習狀態,初始狀態下為空;
 77 %%      輸出參數LS:新的學習速率;
 78 %%      輸出參數dW:S*R維的權值或閾值變化率矩陣;
 79 %% 案例:根據給出的隨機梯度及速率計算權值與閾值的變化率
 80 clear all;
 81 gW = rand(3,2);
 82 lp.lr = 0.5;
 83 dW = learngd([],[],[],[],[],[],[],gW,[],[],lp,[]);
 84 
 85 %%  3.2 learngdm函數:梯度下降動量學習函數,它通過神經網絡的輸入和誤差、權值和閾值的學習速率和動量常數來計算權值或閾值的變化率;
 86 %%  調用格式:[dW,LS] = learngdm(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
 87 %%  info = learngdm(‘code‘)
 88 %%  參數同learngd函數
 89 %% 案例:根據給定的梯度、學習速率以及動量計算其權值及閾值變化率
 90 clear all;
 91 gW = rand(3,2);
 92 lp.lr = 0.5;
 93 lp.mc = 0.8;
 94 ls = [];
 95 [dW,ls] = learngdm([],[],[],[],[],[],[],gW,[],[],lp,ls);
 96 
 97 %% 第4部分 性能函數
 98 %%  4.1 mse函數:用於計算BP神經網絡的均方誤差;
 99 %%  調用格式:   perf = mse(E,Y,X,FP);
100 %%              dPerf_dy = mse(‘dy‘,E,Y,X,perf,FP);
101 %%              dPerf_dx = mse(‘dx‘,E,Y,X,perf,FP);
102 %%              info = mse(‘code‘);
103 %%                  當 code=pnames,返回設置的學習參數;
104 %%                      code=pdefaults,返回默認的學習參數;
105 %%                      code=pdefaults,返回默認的訓練參數;
106 %%              E:誤差矩陣或向量(E = T-Y,T表示網絡的目標向量)
107 %%              Y:網絡的輸出向量(可忽略);         
108 %%              X:所有權值和閾值向量(可忽略);
109 %%              FP:性能參數(可忽略);
110 %%              perf:平均絕對誤差;
111 %%              dPerf_dy:perf對Y的導數;
112 %%              dPerf_dx:perf對X的導數;
113 %%  案例:創建一個BP網絡,並計算其均方誤差性能
114 clear all;
115 net = newff([-10 10],[4,1],{‘tansig‘,‘purelin‘});   %創建一個BP網絡
116 p = [-10 -5 0 5 10];
117 t = [0 0 1 1 1];
118 disp(‘網絡仿真值‘);
119 y = sim(net,p);
120 disp(‘絕對誤差值‘);
121 e = t-y;
122 disp(‘均方誤差性能‘);
123 perf = mse(e);
124 
125 %% 4.2 msereg函數:用於通過兩個因子的加權和來評估網絡性能,這兩個因子分別為均方誤差、均方權值和閾值。
126 %%      調用格式:   perf = msereg(E,Y,X,FP);
127 %%                 dPerf_dy = msereg(‘dy‘,E,Y,X,perf,FP);
128 %%                 dPerf_dx = msereg(‘dx‘,E,Y,X,perf,FP);
129 %%        參數與mse同
130 %% 案例: 創建一個BP網絡並評估其性能
131 clear all;
132 net = newff([-10 10],[4,1],{‘tansig‘,‘purelin‘});   %創建一個BP網絡
133 p = [-10 -5 0 5 10];
134 t = [0 0 1 1 1];
135 y = sim(net,p);
136 e = t-y;
137 net.performParam.ratio = 20/(20+1);
138 perf = msereg(e,net);
139 
140 
141 %% 第5部分 訓練函數
142 %%  5.1 trainbfg函數:該函數是BFGS準牛頓BP算法函數。除了BP網絡外,還可以訓練任意形式的神經網絡,只要它的傳遞函數對於權值和輸入存在導數
143 %%  即可;
144 %%  調用格式:[net,TR] = trainbfg(net,TR,trainV,valV,testV);
145 %%      net:神經網絡對象;
146 %%      TR:初始化的訓練記錄;
147 %%      trainV:訓練向量;
148 %%      valV:驗證向量;
149 %%      testV:測試向量;
150 %%      輸出參數net:訓練網格;
151 %%      輸出參數TR:訓練記錄;
152 %%      info = trainbfg(‘code‘); 返回有關函數的有用信息;
153 %%
154 %%                  BP網格訓練參數(MATLAB R2011a默認值)
155 %%  參數名稱                        默認值                 屬性
156 %%  net.trainParam.epochs           100        訓練次數,100為人工設定訓練次數最大值
157 %%  net.trainParam.showWindow       25          兩次顯示之間的訓練步數(無顯示時設為NaNa)
158 %%  net.trainParam.showCommandLine  0           生成命令行輸出
159 %%  net.trainParam.showGUI          1           顯示GUI訓練
160 %%  net.trainParam.goal             0           訓練目標
161 %%  net.trainParam.time             inf         訓練時間,inf表示訓練時間不限
162 %%  net.trainParam.min_grad         le-6        最小性能梯度
163 %%  net.trainParam.min_fail         5           最大確認失敗次數
164 %%  net.trainParam.searchFcn      ‘srchcha‘     所用的線性搜索路徑  
165 %%
166 %%
167 %% 案例:對創建的BP網絡進行BFGS準牛頓學習
168 clear all;
169 P = [0 1 2 3 4 5];
170 T = [0 0 0 1 1 1];
171 net = newff(P,T,2,{},‘trainbfg‘);
172 a1 = sim(net,P);
173 net = train(net,P,T);
174 a2 = sim(net,P);
175 
176 %% 5.2 traingd函數
177 %% 案例:對創建的BP網絡進行梯度下降學習;
178 clear all;
179 p = [-1 -1 2 2 ;0 5 0 5];
180 t = [-1 -1 1 1];
181 net = newff(p,t,3,{},‘traingd‘);
182 % 對BP網絡訓練參數進行設置
183 net.divideFcn = ‘‘;
184 net.trainParam.show = 50;
185 net.trainParam.lr = 0.05;
186 net.trainParam.epochs = 300;
187 met.trainParam.goal = 1e-5;
188 a = sim(net,p);
189 
190 %% 5.3 traingdm函數:梯度下降動量BP算法函數;
191 %% 案例:對創建的BP網絡進行動量梯度下降學習;
192 clear all;
193 p = [-1 -1 2 2;0 5 0 5];
194 t = [-1 -1 1 1];
195 net = newff(p,t,3,{},‘traingdm‘);           %創建BP網絡; 
196     % 對BP網絡訓練參數進行設置;
197 net.trainParam.lr = 0.05;
198 net.trainParam.mc = 0.9;
199 y = sim(net,p);                             %對網絡進行仿真;
200 
201 %% 第6部分 顯示函數(MATLAB神經網絡工具箱提供了三個函數)
202 %%  6.1 errsurf函數:用於計算單個神經網絡的誤差曲面;
203 %%      調用格式:errsurf(P,T,WV,BV,F)
204 %%              P:輸入行向量;
205 %%              T:目標行向量;
206 %%              WV:權值列向量;
207 %%              BV:閾值向量;
208 %%              F:函數名稱;
209 
210 %%  6.2 plotes函數:用於繪制誤差曲面圖;由權值和閾值確定的、由函數errsurf計算得出的;
211 %%      plotes(WV,BV,ES,V);
212 %%          WV:權值的N維行向量;
213 %%          BV:M維的閾值行向量;
214 %%          ES:誤差向量組成的額M*N維矩陣;
215 %%          V:視角,默認[-37.5,30];
216 %% 案例:根據樣本和木筆噢數據,繪制誤差曲面圖;
217 clear all;
218 p = [-6.0 -6.1 -4.1 -4.0 +4.0 +4.1 +6.0 +6.1];
219 t = [+0.0 +0.0 +.97 +.99 +.01 +.03 +1.0 +1.0];
220 wv = -1:0.1:1;
221 bv = -2.5:0.25:2.5;
222 es = errsurf(p,t,wv,bv,‘logsig‘);
223 plotes(wv,bv,es,[60 30]);
224 set(gcf,‘color‘,‘w‘);
225 
226 
227 %%  6.3 plotep函數
228 %%     調用格式:F = plotep(W,B,E);
229 %%              F = plotep(W,B,E,H); 
230 %%              W:當前權值矩陣;
231 %%              B:當前閾值向量;
232 %%              E:當前神經元誤差;
233 %%              H:權值和閾值在上一時刻的位置向量
234 %%              F:當前的權值和閾值位置信息向量;
235 %% 案例:根據輸入樣本和目標數據,計算權值和閾值在誤差曲面上的位置;
236 clear all;
237 X =[2.0 2.0];
238 T = [0.5 0.52];
239 W = -4:0.4:4;
240 b = W;
241 ES = errsurf(X,T,W,b,‘logsig‘);
242 plotes(W,b,ES,[60 60]);
243 W = -2;
244 b = 0;
245 net = newlind(X,T);
246 a = sim(net,X);
247 E = T-a;
248 e = sumsqr(E);
249 plotep(W,b,e);

利用MATLAB工具箱學習BP神經網絡