BP神經網絡的設計實例(MATLAB編程)_第1頁
BP神經網絡的設計實例(MATLAB編程)_第2頁
BP神經網絡的設計實例(MATLAB編程)_第3頁
BP神經網絡的設計實例(MATLAB編程)_第4頁
BP神經網絡的設計實例(MATLAB編程)_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

神經網絡的設計實例(MATLAB編程)例1 采用動量梯度下降算法訓練 BP 網絡。訓練樣本定義如下:輸入矢量為p =-1 -2 3 1 -1 1 5 -3目標矢量為 t = -1 -1 1 1解:本例的 MATLAB 程序如下:close allclearecho onclc% NEWFF生成一個新的前向神經網絡% TRAIN對 BP 神經網絡進行訓練% SIM對 BP 神經網絡進行仿真pause% 敲任意鍵開始clc% 定義訓練樣本P=-1, -2, 3, 1; -1, 1, 5, -3; % P 為輸入矢量T=-1, -1, 1, 1;% T 為目標矢量pause;clc% 創建一個新的前向神經網絡net=newff(minmax(P),3,1,tansig,purelin,traingdm)% 當前輸入層權值和閾值inputWeights=net.IW1,1inputbias=net.b1% 當前網絡層權值和閾值layerWeights=net.LW2,1layerbias=net.b2pauseclc% 設置訓練參數net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3;pauseclc% 調用 TRAINGDM 算法訓練 BP 網絡net,tr=train(net,P,T);pauseclc% 對 BP 網絡進行仿真A = sim(net,P)% 計算仿真誤差E = T - AMSE=mse(E)pauseclcecho off例2 采用貝葉斯正則化算法提高 BP 網絡的推廣能力。在本例中,我們采用兩種訓練方法,即 L-M 優化算法(trainlm)和貝葉斯正則化算法(trainbr),用以訓練 BP 網絡,使其能夠擬合某一附加有白噪聲的正弦樣本數據。其中,樣本數據可以采用如下MATLAB 語句生成:輸入矢量:P = -1:0.05:1;目標矢量:randn(seed,);T = sin(2*pi*P)+0.1*randn(size(P);解:本例的 MATLAB 程序如下:close allclearecho onclc% NEWFF生成一個新的前向神經網絡% TRAIN對 BP 神經網絡進行訓練% SIM對 BP 神經網絡進行仿真pause% 敲任意鍵開始clc% 定義訓練樣本矢量% P 為輸入矢量P = -1:0.05:1;% T 為目標矢量randn(seed,); T = sin(2*pi*P)+0.1*randn(size(P);% 繪制樣本數據點plot(P,T,+);echo offhold on;plot(P,sin(2*pi*P),:);% 繪制不含噪聲的正弦曲線echo onclcpauseclc% 創建一個新的前向神經網絡net=newff(minmax(P),20,1,tansig,purelin);pauseclcecho offclcdisp(1. L-M 優化算法 TRAINLM); disp(2. 貝葉斯正則化算法 TRAINBR);choice=input(請選擇訓練算法(1,2):);figure(gcf);if(choice=1)echo onclc% 采用 L-M 優化算法 TRAINLMnet.trainFcn=trainlm;pauseclc% 設置訓練參數net.trainParam.epochs = 500;net.trainParam.goal = 1e-6;net=init(net);% 重新初始化pauseclcelseif(choice=2)echo onclc% 采用貝葉斯正則化算法 TRAINBRnet.trainFcn=trainbr;pauseclc% 設置訓練參數net.trainParam.epochs = 500;randn(seed,);net = init(net);% 重新初始化pauseclcend% 調用相應算法訓練 BP 網絡net,tr=train(net,P,T);pauseclc% 對 BP 網絡進行仿真A = sim(net,P);% 計算仿真誤差E = T - A;MSE=mse(E)pauseclc% 繪制匹配結果曲線close all;plot(P,A,P,T,+,P,sin(2*pi*P),:);pause;clcecho off通過采用兩種不同的訓練算法,我們可以得到如圖 1和圖 2所示的兩種擬合結果。圖中的實線表示擬合曲線,虛線代表不含白噪聲的正弦曲線,點為含有白噪聲的正弦樣本數據點。顯然,經 trainlm 函數訓練后的神經網絡對樣本數據點實現了過度匹配,而經 trainbr 函數訓練的神經網絡對噪聲不敏感,具有較好的推廣能力。值得指出的是,在利用 trainbr 函數訓練 BP 網絡時,若訓練結果收斂,通常會給出提示信息Maximum MU reached。此外,用戶還可以根據 SSE 和 SSW 的大小變化情況來判斷訓練是否收斂:當 SSE 和 SSW 的值在經過若干步迭代后處于恒值時,則通常說明網絡訓練收斂,此時可以停止訓練。觀察trainbr 函數訓練 BP 網絡的誤差變化曲線,可見,當訓練迭代至 320 步時,網絡訓練收斂,此時 SSE 和 SSW 均為恒值,當前有效網絡的參數(有效權值和閾值)個數為 11.7973。例3 采用提前停止方法提高 BP 網絡的推廣能力。對于和例 2相同的問題,在本例中我們將采用訓練函數 traingdx 和提前停止相結合的方法來訓練 BP 網絡,以提高 BP 網絡的推廣能力。解:在利用提前停止方法時,首先應分別定義訓練樣本、驗證樣本或測試樣本,其中,驗證樣本是必不可少的。在本例中,我們只定義并使用驗證樣本,即有驗證樣本輸入矢量:val.P = -0.975:.05:0.975驗證樣本目標矢量:val.T = sin(2*pi*val.P)+0.1*randn(size(val.P)值得注意的是,盡管提前停止方法可以和任何一種 BP 網絡訓練函數一起使用,但是不適合同訓練速度過快的算法聯合使用,比如 trainlm 函數,所以本例中我們采用訓練速度相對較慢的變學習速率算法 traingdx 函數作為訓練函數。本例的 MATLAB 程序如下:close allclearecho onclc% NEWFF生成一個新的前向神經網絡% TRAIN對 BP 神經網絡進行訓練% SIM對 BP 神經網絡進行仿真pause% 敲任意鍵開始clc% 定義訓練樣本矢量% P 為輸入矢量P = -1:0.05:1;% T 為目標矢量randn(seed,);T = sin(2*pi*P)+0.1*randn(size(P);% 繪制訓練樣本數據點plot(P,T,+);echo offhold on;plot(P,sin(2*pi*P),:); % 繪制不含噪聲的正弦曲線echo onclcpauseclc% 定義驗證樣本val.P = -0.975:0.05:0.975; % 驗證樣本的輸入矢量val.T = sin(2*pi*val.P)+0.1*randn(size(val.P); % 驗證樣本的目標矢量pauseclc% 創建一個新的前向神經網絡net=newff(minmax(P),5,1,tansig,purelin,traingdx);pauseclc% 設置訓練參數net.trainParam.epochs = 500;net = init(net);pauseclc% 訓練 BP 網絡net,tr=train(net,P,T,val);pauseclc% 對 BP 網絡進行仿真A = sim(net,P);% 計算仿真誤差E = T - A;MSE=mse(E)pauseclc% 繪制仿真擬合結果曲線close all;plot(P,A,P,T,+,P,sin(2*pi*P),:);pause;clcecho off下面給出了網絡的某次訓練結果,可見,當訓練至第 136 步時,訓練提前停止,此時的網絡誤差為 0.。給出了訓練后的仿真數據擬合曲線,效果是相當滿意的。net,tr=train(net,P,T,val);TRAINGDX, Epoch 0/500, MSE 0./0, Gradient 2.1201/1e-006TRAINGDX, Epoch 25/500, MSE 0./0, Gradient 0./1e-006TRAINGDX, Epoch 50/500, MSE 0./0, Gradient 0./1e-006TRAINGDX, Epoch 75/500, MSE 0./0, Gradient 0./1e-006TRAINGDX, Epoch 100/500, MSE 0./0, Gradient 0./1e-006TRAINGDX, Epoch 125/500, MSE 0./0, Gradient 0./1e-006TRAINGDX, Epoch 136/500, MSE 0./0, Gradient 0.01203/1e-006TRAINGDX, Validation stop.例3 用BP網絡估計膽固醇含量這是一個將神經網絡用于醫療應用的例子。我們設計一個器械,用于從血樣的光譜組成的測量中得到血清的膽固醇含量級別,我們有261個病人的血樣值,包括21種波長的譜線的數據,對于這些病人,我們得到了基于 光譜分類的膽固醇含量級別hdl,ldl,vldl。(1) 樣本數據的定義與預處理。choles_all.mat 文件中存儲了網絡訓練所需要的全部樣本數據。利用 load 函數可以在工作空間中自動載入網絡訓練所需的輸入數據 p 和目標數據 t,即load choles_allsizeofp = size (p)sizeofp = 21 264sizeoft = size (t)sizeoft = 3 264可見,樣本集的大小為 264。為了提高神經網絡的訓練效率,通常要對樣本數據作適當的預處理。首先,利用 prestd 函數對樣本數據作歸一化處理,使得歸一化后的輸入和目標數據均服從正態分布,即 pn,meanp,stdp,tn,meant,stdt = prestd(p,t);然后,利用 prepca 函數對歸一化后的樣本數據進行主元分析,從而消除樣本數據中的冗余成份,起到數據降維的目的。ptrans,transMat = prepca(pn,0.001);R,Q = size(ptrans)R = 4 Q = 264可見,主元分析之后的樣本數據維數被大大降低,輸入數據的維數由 21 變為 4。(2) 對訓練樣本、驗證樣本和測試樣本進行劃分。為了提高網絡的推廣能力和識別能力,訓練中采用提前停止的方法,因此,在訓練之前,需要將上面處理后的樣本數據適當劃分為訓練樣本集、驗證樣本集和測試樣本集。(3) 網絡生成與訓練。 選用兩層 BP 網絡,其中網絡輸入維數為 4,輸出維數為 3,輸出值即為血清膽固醇的三個指標值大小。網絡中間層神經元數目預選為 5,傳遞函數類型選為 tansig 函數,輸出層傳遞函數選為線性函數 purelin,訓練函數設為 trainlm。網絡的生成語句如下:net = newff(minmax(ptr),5 3,tansig purelin,trainlm);利用 train 函數對所生成的神經網絡進行訓練,訓練結果如下:net,tr=train(net,ptr,ttr,val,test);見,網絡訓練迭代至第 20 步時提前停止,這是由于驗證誤差已經開始變大。利用下面語句可以繪制出訓練誤差、驗證誤差和測試誤差的變化曲線,如圖 4.50 所示。由圖可見,驗證誤差和測試誤差的變化趨勢基本一致,說明樣本集的劃分基本合理。由訓練誤差曲線可見,訓練誤差結果也是比較滿意的。(4) 網絡仿真。 為了進一步檢驗訓練后網絡的性能,下面對訓練結果作進一步仿真分析。利用 postreg函數可以對網絡仿真的輸出結果和目標輸出作線性回歸分析,并得到兩者的相關系數,從而可以作為網絡訓練結果優劣的判別依據。仿真與線性回歸分析如下:an = sim(net,ptrans);a = poststd(an,meant,stdt);for i=1:3figure(i)m(i),b(i),r(i) = postreg(a(i,:),t(i,:);end%導入原始測量數據load choles_all;%對原始數據進行規范化處理,prestd是對輸入數據和輸出數據進行規范化處理,%prepca可以刪除一些數據,適當地保留了變化不小于0.01的數據pn,meanp,stdp,tn,meant,stdt=prestd(p,t);ptrans,transMat=prepca(pn,0.001);R,Q=size(ptrans)%將原始數據分成幾個部分作為不同用途四分已用于確證,四分一用于測試,二分一用于訓練網絡iitst=2:4:Q;iival=4:4:Q;iitr=1:4:Q 3:4:Q;%vv是確證向量,.P是輸入,.T是輸出,vt是測試向量vv.P=ptrans(:,iival);vv.T=tn(:,iival);vt.P=ptrans(:,iitst);vt.T=tn(:,iitst);ptr=ptrans(:,iitr);ttr=tn(:,iitr);%建立網絡,隱層中設計5個神經元,由于需要得到的是3個目標,所以網絡需要有3個輸出net=newff(minmax(ptr),5 3,tansig purelin,trainlm);%訓練網絡net.trainParam.show=5;net,tr=train(net,ptr,ttr,vv,vt);%繪出訓練過程中各誤差的變化曲線plot(tr.epoch,tr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論