




已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MATLAB程序代碼-BP神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)實(shí)例例1 采用動(dòng)量梯度下降算法訓(xùn)練 BP 網(wǎng)絡(luò)。訓(xùn)練樣本定義如下:輸入矢量為 p =-1 -2 3 1 -1 1 5 -3目標(biāo)矢量為 t = -1 -1 1 1解:本例的 MATLAB 程序如下: close all clear echo on clc % NEWFF生成一個(gè)新的前向神經(jīng)網(wǎng)絡(luò) % TRAIN對(duì) BP 神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練 % SIM對(duì) BP 神經(jīng)網(wǎng)絡(luò)進(jìn)行仿真 pause % 敲任意鍵開(kāi)始 clc % 定義訓(xùn)練樣本 % P 為輸入矢量 P=-1, -2, 3, 1; -1, 1, 5, -3;% T 為目標(biāo)矢量 T=-1, -1, 1, 1; pause; clc % 創(chuàng)建一個(gè)新的前向神經(jīng)網(wǎng)絡(luò) net=newff(minmax(P),3,1,tansig,purelin,traingdm)% 當(dāng)前輸入層權(quán)值和閾值 inputWeights=net.IW1,1 inputbias=net.b1 % 當(dāng)前網(wǎng)絡(luò)層權(quán)值和閾值 layerWeights=net.LW2,1 layerbias=net.b2 pause clc % 設(shè)置訓(xùn)練參數(shù) net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9; bpnet=newff(pr,12 4,logsig, logsig, traingdx, learngdm);%建立BP神經(jīng)網(wǎng)絡(luò), 12個(gè)隱層神經(jīng)元,4個(gè)輸出神經(jīng)元%tranferFcn屬性 logsig 隱層采用Sigmoid傳輸函數(shù)%tranferFcn屬性 logsig 輸出層采用Sigmoid傳輸函數(shù)%trainFcn屬性 traingdx 自適應(yīng)調(diào)整學(xué)習(xí)速率附加動(dòng)量因子梯度下降反向傳播算法訓(xùn)練函數(shù)%learn屬性 learngdm 附加動(dòng)量因子的梯度下降學(xué)習(xí)函數(shù) net.trainParam.epochs=1000;%允許最大訓(xùn)練步數(shù)2000步net.trainParam.goal=0.001; %訓(xùn)練目標(biāo)最小誤差0.001net.trainParam.show=10; %每間隔100步顯示一次訓(xùn)練結(jié)果net.trainParam.lr=0.05; %學(xué)習(xí)速率0.05net.trainParam.epochs = 1000; net.trainParam.goal = 1e-3; pause clc % 調(diào)用 TRAINGDM 算法訓(xùn)練 BP 網(wǎng)絡(luò) net,tr=train(net,P,T); pause clc % 對(duì) BP 網(wǎng)絡(luò)進(jìn)行仿真 A = sim(net,P) % 計(jì)算仿真誤差 E = T - A MSE=mse(E) pause clc echo off 例2 采用貝葉斯正則化算法提高 BP 網(wǎng)絡(luò)的推廣能力。在本例中,我們采用兩種訓(xùn)練方法,即 L-M 優(yōu)化算法(trainlm)和貝葉斯正則化算法(trainbr),用以訓(xùn)練 BP 網(wǎng)絡(luò),使其能夠擬合某一附加有白噪聲的正弦樣本數(shù)據(jù)。其中,樣本數(shù)據(jù)可以采用如下MATLAB 語(yǔ)句生成: 輸入矢量:P = -1:0.05:1; 目標(biāo)矢量:randn(seed,78341223); T = sin(2*pi*P)+0.1*randn(size(P); 解:本例的 MATLAB 程序如下: close all clear echo on clc % NEWFF生成一個(gè)新的前向神經(jīng)網(wǎng)絡(luò) % TRAIN對(duì) BP 神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練% SIM對(duì) BP 神經(jīng)網(wǎng)絡(luò)進(jìn)行仿真 pause % 敲任意鍵開(kāi)始 clc % 定義訓(xùn)練樣本矢量 % P 為輸入矢量 P = -1:0.05:1; % T 為目標(biāo)矢量 randn(seed,78341223); T = sin(2*pi*P)+0.1*randn(size(P); % 繪制樣本數(shù)據(jù)點(diǎn) plot(P,T,+); echo off hold on; plot(P,sin(2*pi*P),:); % 繪制不含噪聲的正弦曲線 echo on clc pause clc % 創(chuàng)建一個(gè)新的前向神經(jīng)網(wǎng)絡(luò) net=newff(minmax(P),20,1,tansig,purelin); pause clc echo off clcdisp(1. L-M 優(yōu)化算法 TRAINLM); disp(2. 貝葉斯正則化算法 TRAINBR); choice=input(請(qǐng)選擇訓(xùn)練算法(1,2):); figure(gcf); if(choice=1) echo on clc % 采用 L-M 優(yōu)化算法 TRAINLM net.trainFcn=trainlm; pause clc % 設(shè)置訓(xùn)練參數(shù) net.trainParam.epochs = 500; net.trainParam.goal = 1e-6; net=init(net); % 重新初始化 pause clcelseif(choice=2) echo on clc % 采用貝葉斯正則化算法 TRAINBR net.trainFcn=trainbr; pause clc % 設(shè)置訓(xùn)練參數(shù) net.trainParam.epochs = 500; randn(seed,192736547); net = init(net); % 重新初始化 pause clc end % 調(diào)用相應(yīng)算法訓(xùn)練 BP 網(wǎng)絡(luò) net,tr=train(net,P,T); pause clc % 對(duì) BP 網(wǎng)絡(luò)進(jìn)行仿真 A = sim(net,P); % 計(jì)算仿真誤差 E = T - A; MSE=mse(E) pause clc % 繪制匹配結(jié)果曲線 close all; plot(P,A,P,T,+,P,sin(2*pi*P),:); pause; clc echo off通過(guò)采用兩種不同的訓(xùn)練算法,我們可以得到如圖 1和圖 2所示的兩種擬合結(jié)果。圖中的實(shí)線表示擬合曲線,虛線代表不含白噪聲的正弦曲線,“”點(diǎn)為含有白噪聲的正弦樣本數(shù)據(jù)點(diǎn)。顯然,經(jīng) trainlm 函數(shù)訓(xùn)練后的神經(jīng)網(wǎng)絡(luò)對(duì)樣本數(shù)據(jù)點(diǎn)實(shí)現(xiàn)了“過(guò)度匹配”,而經(jīng) trainbr 函數(shù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)對(duì)噪聲不敏感,具有較好的推廣能力。值得指出的是,在利用 trainbr 函數(shù)訓(xùn)練 BP 網(wǎng)絡(luò)時(shí),若訓(xùn)練結(jié)果收斂,通常會(huì)給出提示信息“Maximum MU reached”。此外,用戶還可以根據(jù) SSE 和 SSW 的大小變化情況來(lái)判斷訓(xùn)練是否收斂:當(dāng) SSE 和 SSW 的值在經(jīng)過(guò)若干步迭代后處于恒值時(shí),則通常說(shuō)明網(wǎng)絡(luò)訓(xùn)練收斂,此時(shí)可以停止訓(xùn)練。觀察trainbr 函數(shù)訓(xùn)練 BP 網(wǎng)絡(luò)的誤差變化曲線,可見(jiàn),當(dāng)訓(xùn)練迭代至 320 步時(shí),網(wǎng)絡(luò)訓(xùn)練收斂,此時(shí) SSE 和 SSW 均為恒值,當(dāng)前有效網(wǎng)絡(luò)的參數(shù)(有效權(quán)值和閾值)個(gè)數(shù)為 11.7973。 例3 采用“提前停止”方法提高 BP 網(wǎng)絡(luò)的推廣能力。對(duì)于和例 2相同的問(wèn)題,在本例中我們將采用訓(xùn)練函數(shù) traingdx 和“提前停止”相結(jié)合的方法來(lái)訓(xùn)練 BP 網(wǎng)絡(luò),以提高 BP 網(wǎng)絡(luò)的推廣能力。 解:在利用“提前停止”方法時(shí),首先應(yīng)分別定義訓(xùn)練樣本、驗(yàn)證樣本或測(cè)試樣本,其中,驗(yàn)證樣本是必不可少的。在本例中,我們只定義并使用驗(yàn)證樣本,即有 驗(yàn)證樣本輸入矢量:val.P = -0.975:.05:0.975 驗(yàn)證樣本目標(biāo)矢量:val.T = sin(2*pi*val.P)+0.1*randn(size(val.P) 值得注意的是,盡管“提前停止”方法可以和任何一種 BP 網(wǎng)絡(luò)訓(xùn)練函數(shù)一起使用,但是不適合同訓(xùn)練速度過(guò)快的算法聯(lián)合使用,比如 trainlm 函數(shù),所以本例中我們采用訓(xùn)練速度相對(duì)較慢的變學(xué)習(xí)速率算法 traingdx 函數(shù)作為訓(xùn)練函數(shù)。本例的 MATLAB 程序如下:close all clear echo on clc % NEWFF生成一個(gè)新的前向神經(jīng)網(wǎng)絡(luò) % TRAIN對(duì) BP 神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練 % SIM對(duì) BP 神經(jīng)網(wǎng)絡(luò)進(jìn)行仿真 pause % 敲任意鍵開(kāi)始 clc % 定義訓(xùn)練樣本矢量 % P 為輸入矢量 P = -1:0.05:1; % T 為目標(biāo)矢量 randn(seed,78341223); T = sin(2*pi*P)+0.1*randn(size(P); % 繪制訓(xùn)練樣本數(shù)據(jù)點(diǎn) plot(P,T,+); echo off hold on; plot(P,sin(2*pi*P),:); % 繪制不含噪聲的正弦曲線 echo on clc pause clc % 定義驗(yàn)證樣本 val.P = -0.975:0.05:0.975; % 驗(yàn)證樣本的輸入矢量 val.T = sin(2*pi*val.P)+0.1*randn(size(val.P); % 驗(yàn)證樣本的目標(biāo)矢量 pause clc % 創(chuàng)建一個(gè)新的前向神經(jīng)網(wǎng)絡(luò) net=newff(minmax(P),5,1,tansig,purelin,traingdx); pause clc % 設(shè)置訓(xùn)練參數(shù) net.trainParam.epochs = 500; net = init(net); pause clc % 訓(xùn)練 BP 網(wǎng)絡(luò) net,tr=train(net,P,T,val); pause clc % 對(duì) BP 網(wǎng)絡(luò)進(jìn)行仿真 A = sim(net,P); % 計(jì)算仿真誤差 E = T - A; MSE=mse(E) pause clc % 繪制仿真擬合結(jié)果曲線 close all; plot(P,A,P,T,+,P,sin(2*pi*P),:); pause; clc echo off 下面給出了網(wǎng)絡(luò)的某次訓(xùn)練結(jié)果,可見(jiàn),當(dāng)訓(xùn)練至第 136 步時(shí),訓(xùn)練提前停止,此時(shí)的網(wǎng)絡(luò)誤差為 0.0102565。給出了訓(xùn)練后的仿真數(shù)據(jù)擬合曲線,效果是相當(dāng)滿意的。 net,tr=train(net,P,T,val); TRAINGDX, Epoch 0/500, MSE 0.504647/0, Gradient 2.1201/1e-006TRAINGDX, Epoch 25/500, MSE 0.163593/0, Gradient 0.384793/1e-006TRAINGDX, Epoch 50/500, MSE 0.130259/0, Gradient 0.158209/1e-006TRAINGDX, Epoch 75/500, MSE 0.086869/0, Gradient 0.0883479/1e-006TRAINGDX, Epoch 100/500, MSE 0.0492511/0, Gradient 0.0387894/1e-006TRAINGDX, Epoch 125/500, MSE 0.0110016/0, Gradient 0.017242/1e-006TRAINGDX, Epoch 136/500, MSE 0.0102565/0, Gradient 0.01203/1e-006TRAINGDX, Validation stop.例3 用BP網(wǎng)絡(luò)估計(jì)膽固醇含量這是一個(gè)將神經(jīng)網(wǎng)絡(luò)用于醫(yī)療應(yīng)用的例子。我們?cè)O(shè)計(jì)一個(gè)器械,用于從血樣的光譜組成的測(cè)量中得到血清的膽固醇含量級(jí)別,我們有261個(gè)病人的血樣值,包括21種波長(zhǎng)的譜線的數(shù)據(jù),對(duì)于這些病人,我們得到了基于 光譜分類的膽固醇含量級(jí)別hdl,ldl,vldl。(1) 樣本數(shù)據(jù)的定義與預(yù)處理。 choles_all.mat 文件中存儲(chǔ)了網(wǎng)絡(luò)訓(xùn)練所需要的全部樣本數(shù)據(jù)。利用 load 函數(shù)可以在工作空間中自動(dòng)載入網(wǎng)絡(luò)訓(xùn)練所需的輸入數(shù)據(jù) p 和目標(biāo)數(shù)據(jù) t,即 load choles_all sizeofp = size (p) sizeofp = 21 264 sizeoft = size (t) sizeoft = 3 264可見(jiàn),樣本集的大小為 264。為了提高神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效率,通常要對(duì)樣本數(shù)據(jù)作適當(dāng)?shù)念A(yù)處理。首先,利用 prestd 函數(shù)對(duì)樣本數(shù)據(jù)作歸一化處理,使得歸一化后的輸入和目標(biāo)數(shù)據(jù)均服從正態(tài)分布,即 pn,meanp,stdp,tn,meant,stdt = prestd(p,t); 然后,利用 prepca 函數(shù)對(duì)歸一化后的樣本數(shù)據(jù)進(jìn)行主元分析,從而消除樣本數(shù)據(jù)中的冗余成份,起到數(shù)據(jù)降維的目的。 ptrans,transMat = prepca(pn,0.001); R,Q = size(ptrans) R = 4 Q = 264 可見(jiàn),主元分析之后的樣本數(shù)據(jù)維數(shù)被大大降低,輸入數(shù)據(jù)的維數(shù)由 21 變?yōu)?4。(2) 對(duì)訓(xùn)練樣本、驗(yàn)證樣本和測(cè)試樣本進(jìn)行劃分。 為了提高網(wǎng)絡(luò)的推廣能力和識(shí)別能力,訓(xùn)練中采用“提前停止”的方法,因此,在訓(xùn)練之前,需要將上面處理后的樣本數(shù)據(jù)適當(dāng)劃分為訓(xùn)練樣本集、驗(yàn)證樣本集和測(cè)試樣本集。(3) 網(wǎng)絡(luò)生成與訓(xùn)練。 選用兩層 BP 網(wǎng)絡(luò),其中網(wǎng)絡(luò)輸入維數(shù)為 4,輸出維數(shù)為 3,輸出值即為血清膽固醇的三個(gè)指標(biāo)值大小。網(wǎng)絡(luò)中間層神經(jīng)元數(shù)目預(yù)選為 5,傳遞函數(shù)類型選為 tansig 函數(shù),輸出層傳遞函數(shù)選為線性函數(shù) purelin,訓(xùn)練函數(shù)設(shè)為 trainlm。網(wǎng)絡(luò)的生成語(yǔ)句如下:net = newff(minmax(ptr),5 3,tansig purelin,trainlm); 利用 train 函數(shù)對(duì)所生成的神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,訓(xùn)練結(jié)果如下: net,tr=train(net,ptr,ttr,val,test); 見(jiàn),網(wǎng)絡(luò)訓(xùn)練迭代至第 20 步時(shí)提前停止,這是由于驗(yàn)證誤差已經(jīng)開(kāi)始變大。利用下面語(yǔ)句可以繪制出訓(xùn)練誤差、驗(yàn)證誤差和測(cè)試誤差的變化曲線,如圖 4.50 所示。由圖可見(jiàn),驗(yàn)證誤差和測(cè)試誤差的變化趨勢(shì)基本一致,說(shuō)明樣本集的劃分基本合理。由訓(xùn)練誤差曲線可見(jiàn),訓(xùn)練誤差結(jié)果也是比較滿意的。(4) 網(wǎng)絡(luò)仿真。 為了進(jìn)一步檢驗(yàn)訓(xùn)練后網(wǎng)絡(luò)的性能,下面對(duì)訓(xùn)練結(jié)果作進(jìn)一步仿真分析。利用 postreg函數(shù)可以對(duì)網(wǎng)絡(luò)仿真的輸出結(jié)果和目標(biāo)輸出作線性回歸分析,并得到兩者的相關(guān)系數(shù),從而可以作為網(wǎng)絡(luò)訓(xùn)練結(jié)果優(yōu)劣的判別依據(jù)。仿真與線性回歸分析如下: an = sim(net,ptrans); a = poststd(an,meant,stdt); for i=1:3 figure(i) m(i),b(i),r(i) = postreg(a(i,:),t(i,:); end %導(dǎo)入原始測(cè)量數(shù)據(jù)load choles_all;%對(duì)原始數(shù)據(jù)進(jìn)行規(guī)范化處理,prestd是對(duì)輸入數(shù)據(jù)和輸出數(shù)據(jù)進(jìn)行規(guī)范化處理,%prepca可以刪除一些數(shù)據(jù),適當(dāng)?shù)乇A袅俗兓恍∮?.01的數(shù)據(jù)pn,meanp,stdp,tn,meant,stdt=prestd(p,t);ptrans,transMat=prepca(pn,0.001);R,Q=size(ptrans) %將原始數(shù)據(jù)分成幾個(gè)部分作為不同用途四分已用于確證,四分一用于測(cè)試,二分一用于訓(xùn)練網(wǎng)絡(luò)iitst=2:4:Q;iival=4:4:Q;iitr=1:4:Q 3:4:Q;%vv是確證向量,.P是輸入,.T是輸出,vt是測(cè)試向量vv.P=ptrans(:,iival); vv.T=tn(:,iival);vt.P=ptrans(:,iitst); vt.T=tn(:,iitst);ptr=ptrans(:,iitr); ttr=tn(:,iitr);%建立網(wǎng)絡(luò),隱層中設(shè)計(jì)5個(gè)神經(jīng)元,由于需要得到的是3個(gè)目標(biāo),所以網(wǎng)絡(luò)需要有3個(gè)輸出net=newff(minmax(ptr),5 3,tansig purelin,trainlm);%訓(xùn)練網(wǎng)絡(luò)net.trainPar
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林省四平市鐵西區(qū)2024-2025學(xué)年七年級(jí)下學(xué)期期末練習(xí)生物試卷(含答案)
- 財(cái)務(wù)會(huì)計(jì)專員崗位職責(zé)要求
- 幼兒園常見(jiàn)傳染病預(yù)防控制課件
- 財(cái)務(wù)會(huì)計(jì)年終工作總結(jié)范文(10篇)
- 土地復(fù)墾措施及其規(guī)劃設(shè)計(jì)教學(xué)課件
- 道德與法治(海南卷)(考試版A3)
- 2025年android音視頻開(kāi)發(fā)面試!這么香的技術(shù)還不快點(diǎn)學(xué)起來(lái)Android篇-andoid視頻秒開(kāi)面試
- 2025年Android事件分發(fā)機(jī)制:面試官你坐啊
- 2024-2025學(xué)年下學(xué)期高一生物滬科版期末必刷常考題之生物進(jìn)化論在不斷發(fā)展
- 部編版五年級(jí)上冊(cè)第一單元《白鷺》教案
- 醫(yī)院護(hù)士辭職申請(qǐng)書(shū)集合六篇(護(hù)士崗位辭職申請(qǐng)書(shū))
- 靜脈注射 Microsoft PowerPoint 演示文稿課件
- 同濟(jì)大學(xué)論文答辯通用PPT模板
- AFC檢測(cè)技術(shù)規(guī)程
- 部編人教版二年級(jí)下學(xué)期數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)復(fù)習(xí)課堂知識(shí)練習(xí)題
- 餐飲行業(yè)抖音代運(yùn)營(yíng)方案
- 《聰明人和傻子和奴才》 課件
- Fleischner指南解讀
- 建筑工地安全生產(chǎn)百日攻堅(jiān)行動(dòng)實(shí)施方案
- 電廠度電機(jī)維修技術(shù)規(guī)范書(shū)正式
- 年產(chǎn)40萬(wàn)噸甲醇合成工藝設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論