MATLAB神經網路(一):BP神經網路

BP神經網路是一種多層前饋神經網路,主要特點是信號前向傳遞,誤差反向傳播。在前向傳遞中,輸入信號從輸入層經隱含層逐層處理,直至輸出層。每一層的神經元狀態隻影響下一層神經元狀態。如果輸出層得不到期望輸出,則轉入反向傳播,根據預測誤差調整網路權值和閾值,從而使BP神經網路預測輸出不斷逼近期望輸出。BP神經網路的拓撲結構如下:

BP神經網路預測前首先要訓練網路,通過訓練使我網路具有聯想記憶和預測能力。BP神經網路的訓練過程包括以下幾個步驟:

1. 網路初始化。根據系統輸入輸出序列(X,Y)確定網路輸入層節點數n、隱含層節點數l,輸出層節點數m,初始化輸入層、隱含層和輸出層神經元之間的連接權值w,初始化隱含層閾值a,輸出層閾值b,給定學習速率和神經元激勵函數。

2. 隱含層輸出計算。根據輸入向量X,w和a,計算隱含層輸出H。

3. 輸出層輸出計算。柑橘隱含層輸出H,連接權值w和閾值b,計算BP神經網路預測輸出O。

4. 誤差計算。根據網路預測輸出O和期望輸出Y,計算網路預測誤差e。

5. 權值更新。根據網路預測誤差e更新網路連接權值。

6. 判斷演算法迭代是否結束,若沒有結束,返回步驟2。

實例:根據BP神經網路,在MATLAB中實現語音特徵信號分類演算法。首先對信號進行歸一化,避免因為輸入輸出數據數量級差別較大造成網路預測誤差較大。歸一化方法有最大最小發和平均數方差法。這裡採用第一種方法:

%input_train,output_train分別是訓練輸入、輸出數據n[inputn,inputps]=mapminmax(input_train);n[outputn,outputps]=mapminmax(output_train);n

outputn是歸一化後的數據,outputps為數據歸一化後得到的結構體,裡面包含了最大值、最小值和平均值等信息,可用於測試數據歸一化和反歸一化。

inputn_test=mapminmax(apply,input_test,inputps); %測試輸入數據歸一化nBPoutput=mapminmax(reverse,an,outputps)%網路預測數據反歸一化n

an是網路預測結果,BPoutput是反歸一化後的網路預測輸出,reverse表示對數據進行反歸一化。

提取四類語音特徵信號,不同的語音信號分別用1,2,3,4標識,提取出的信號分別存儲於data1.mat data2.mat data3.mat data4.mat資料庫文件中,每組數據為25維,第1維為類別標識,後24維為語音特徵信號。隨機抽取1500組數據作為訓練數據,500組數據作為測試數據,並對訓練數據進行歸一化處理。根據語音類別標識設定每組語音信號的期望輸出值,如標識類為1時,期望輸出向量為[1 0 0 0]。

%導入四類語音信號nload data1 c1nload data2 c2nload data3 c3nload data4 c4n%將四類語音特徵信號合併為一組ndata(1:500,:)=c1(1:500,:);ndata(501:1000,:)=c2(1:500,:);ndata(1001:1500,:)=c3(1:500,:);ndata(1501:2000,:)=c4(1:500,:);n%輸入輸出數據ninput=data(:,2:25);noutput1=data(:,1);n%設定每組輸入輸出信號nfor i=1:2000n switch output1(i)n case 1n output(i,:)=[1 0 0 0];n case 2n output(i,:)=[0 1 0 0];n case 3n output(i,:)=[0 0 1 0];n case 4n output(i,:)=[0 0 0 1];n endnendnn%從中隨機抽取1500組數據作為訓練數據,500組數據=作為預測數據nk=rand(1,2000);n[m,n]=sort(k);ninput_train=input(n(1:1500),:);noutput_train=output(n(1:1500),:);ninput_test=input(n(1501:2000),:);noutput_test=output(n(1501:2000),:);nn%輸入數據歸一化n[inputn,inputps]=mapminmax(input_train);n

BP神經網路結構初始化

根據語音特徵信號確定BP神經網路的結構為24-25-4,隨機初始化BP神經網路權值和閾值。

%網路結構ninnum=24;nmidnum=25;noutnum=4;n%權值閾值初始化nw1=rands(midnum,innum);nb1=rands(midnum,1);nw2=rands(midnum,outnum);nb2=rands(outnum,1);n

用訓練數據訓練BP神經網路,在訓練過程中根據網路預測誤差調整網路的權值和閾值。

for ii=1:20n E(ii)=0; %訓練誤差n for i=1:1:1500n %選擇本次訓練數據n x=inputn(:,i);n 隱含層輸出n for j=1:1:midnumn I(j)=inputn(:,i)*w1(j,:)+b1(j);n Iout(j)=1/(1+exp(-I(j)));n endn %輸出層輸出n yn=w2*Iout+b2;nn %預測誤差n e=output_train(:,i)-yn;n E(ii)=E(ii)+sum(abs(e));nn %計算w2.b2調整量n dw2=e*Iout;n db2=e;n %計算w1 b1調整量n for j=1:1:midnumn S=1/(1+exp(-I(j)));n FI(j)=S*(1-S);n endn for k=1:1:innumn for j=1:1:midnumn dw1(k,j)=FI(j)*x(k)*(e(i)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));n db1(j)=FI(j)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));n endn endnn %權值閾值更新n w1=w1_1+xite*dw1;n b1=b1_1+xite*db1;n w2=w2_1+xite*dw2;n b2=b2_1+xite*db2;nn%結果保存n w1_1=w1;n w2_1=w2;n b1_1=b1;n b2_1=b2;n endnendn

推薦閱讀:

打開MATLAB時出現「Waring:could not read file classpath.txt」,怎麼辦?
如何使用MATLAB寫測試(5): MATLAB with Jenkins
MATLAB算符重載和量綱分析

TAG:MATLAB | 神经网络 |