BP神经网络 语音信号分类
BP神經網絡預測首先進行訓練網絡,通過訓練使網絡具有聯想記憶和預測能力,
BP神經網絡的訓練過程包括下面:
1、網絡的初始化,根據系統輸入和輸出確定網路的輸入層節點數n,隱含層l,和輸出層m,初始化輸入層隱含層和輸出層之間的連接權值和偏移,給定學習速率和激勵函數
2、隱含層輸出的計算,根據輸入向量x,輸入層和隱含層之間連接的權重w,以及隱含層閾值a,計算隱含層的輸出H
3、輸出層的輸出計算,,,根據隱含層的輸出,連接權值和偏移 ?計算出神經網絡的輸出
4、計算誤差, ? ? 計算神經網絡預測輸出值和期望輸出值之間的誤差e
5、權值的更新
在進行程序之前 需要對數據進行處理,
數據的歸一化是在數據處理時常用的方法,吧所有的數據轉化到【0 1】之間,這樣的目的主要是消除各個數據間的數量級差別,避免因為數據數量級之間的差別導致的誤差增大;
常用的方法有兩種:
1 x=(X-Xmin)/(Xmax-Xmin);
Xmin ?Xmax分別為數據的最大和最小值
2\x=(X-Xmean)/Xvar;
Xmean表示數據的均值,,Xvar表示數據的方差
在實際中可以直接調用函數 ?mapminmax(X) ? ? 直接處理數據
【X in]=mapminmax(X) ? ? ? ? ? ? ? ? ? ? ? ? ? ?--------------------------------------in指的是歸一化得到的結構體,包含著數據的最大值最小值,平均值等信息,,用于測試數據中
想要把數據反之過來可以
X=mapminmax('apply',x,in) ? ? ? ? ------------------對測試數據的歸一化 嗎,根據in的值對數據進行歸一化,
X=mapminmax('reverse',x,on)
<span style="font-size:18px;">%% 該代碼為基于BP網絡的語言識別%% 清空環境變量 clc clear%% 訓練數據預測數據提取及歸一化%下載四類語音信號 load data1 c1 load data2 c2 load data3 c3 load data4 c4%四個特征信號矩陣合成一個矩陣 data(1:500,:)=c1(1:500,:); data(501:1000,:)=c2(1:500,:); data(1001:1500,:)=c3(1:500,:); data(1501:2000,:)=c4(1:500,:);%從1到2000間隨機排序 k=rand(1,2000); [m,n]=sort(k);%輸入輸出數據 input=data(:,2:25); output1 =data(:,1);%把輸出從1維變成4維 output=zeros(2000,4); for i=1:2000switch output1(i)case 1output(i,:)=[1 0 0 0];case 2output(i,:)=[0 1 0 0];case 3output(i,:)=[0 0 1 0];case 4output(i,:)=[0 0 0 1];end end%隨機提取1500個樣本為訓練樣本,500個樣本為預測樣本 input_train=input(n(1:1500),:)'; output_train=output(n(1:1500),:)'; input_test=input(n(1501:2000),:)'; output_test=output(n(1501:2000),:)';%輸入數據歸一化 [inputn,inputps]=mapminmax(input_train);%% 網絡結構初始化 innum=24; midnum=25; outnum=4;%權值初始化 w1=rands(midnum,innum); b1=rands(midnum,1); w2=rands(midnum,outnum); b2=rands(outnum,1);w2_1=w2;w2_2=w2_1; w1_1=w1;w1_2=w1_1; b1_1=b1;b1_2=b1_1; b2_1=b2;b2_2=b2_1;%學習率 xite=0.1; alfa=0.01; loopNumber=10; I=zeros(1,midnum); Iout=zeros(1,midnum); FI=zeros(1,midnum); dw1=zeros(innum,midnum); db1=zeros(1,midnum);%% 網絡訓練 E=zeros(1,loopNumber); for ii=1:loopNumberE(ii)=0;for i=1:1:1500%% 網絡預測輸出 x=inputn(:,i);% 隱含層輸出for j=1:1:midnumI(j)=inputn(:,i)'*w1(j,:)'+b1(j);Iout(j)=1/(1+exp(-I(j)));end% 輸出層輸出yn=w2'*Iout'+b2;%% 權值閥值修正%計算誤差e=output_train(:,i)-yn; E(ii)=E(ii)+sum(abs(e));%計算權值變化率dw2=e*Iout;db2=e';for j=1:1:midnumS=1/(1+exp(-I(j)));FI(j)=S*(1-S);end for k=1:1:innumfor j=1:1:midnumdw1(k,j)=FI(j)*x(k)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));db1(j)=FI(j)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));endendw1=w1_1+xite*dw1';b1=b1_1+xite*db1';w2=w2_1+xite*dw2';b2=b2_1+xite*db2';w1_2=w1_1;w1_1=w1;w2_2=w2_1;w2_1=w2;b1_2=b1_1;b1_1=b1;b2_2=b2_1;b2_1=b2;end end%% 語音特征信號分類 inputn_test=mapminmax('apply',input_test,inputps); fore=zeros(4,500); for ii=1:1for i=1:500%1500%隱含層輸出for j=1:1:midnumI(j)=inputn_test(:,i)'*w1(j,:)'+b1(j);Iout(j)=1/(1+exp(-I(j)));endfore(:,i)=w2'*Iout'+b2;end end%% 結果分析 %根據網絡輸出找出數據屬于哪類 output_fore=zeros(1,500); for i=1:500output_fore(i)=find(fore(:,i)==max(fore(:,i))); end%BP網絡預測誤差 error=output_fore-output1(n(1501:2000))';%畫出預測語音種類和實際語音種類的分類圖 figure(1) plot(output_fore,'r') hold on plot(output1(n(1501:2000))','b') legend('預測語音類別','實際語音類別')%畫出誤差圖 figure(2) plot(error) title('BP網絡分類誤差','fontsize',12) xlabel('語音信號','fontsize',12) ylabel('分類誤差','fontsize',12)%print -dtiff -r600 1-4k=zeros(1,4); %找出判斷錯誤的分類屬于哪一類 for i=1:500if error(i)~=0[b,c]=max(output_test(:,i));switch ccase 1 k(1)=k(1)+1;case 2 k(2)=k(2)+1;case 3 k(3)=k(3)+1;case 4 k(4)=k(4)+1;endend end%找出每類的個體和 kk=zeros(1,4); for i=1:500[b,c]=max(output_test(:,i));switch ccase 1kk(1)=kk(1)+1;case 2kk(2)=kk(2)+1;case 3kk(3)=kk(3)+1;case 4kk(4)=kk(4)+1;end end%正確率 rightridio=(kk-k)./kk; disp('正確率') disp(rightridio); </span>
調用函數版本:
%% 清空環境變量 clc clear%% 訓練數據預測數據提取及歸一化 %下載輸入輸出數據 load data input output%從1到2000間隨機排序 k=rand(1,2000); [m,n]=sort(k);%找出訓練數據和預測數據 input_train=input(n(1:1900),:)'; output_train=output(n(1:1900)); input_test=input(n(1901:2000),:)'; output_test=output(n(1901:2000));%選連樣本輸入輸出數據歸一化 [inputn,inputps]=mapminmax(input_train); [outputn,outputps]=mapminmax(output_train);%% BP網絡訓練 % %初始化網絡結構 net=newff(inputn,outputn,5);net.trainParam.epochs=100; net.trainParam.lr=0.1; net.trainParam.goal=0.00004;%網絡訓練 net=train(net,inputn,outputn);%% BP網絡預測 %預測數據歸一化 inputn_test=mapminmax('apply',input_test,inputps);%網絡預測輸出 an=sim(net,inputn_test);%網絡輸出反歸一化 BPoutput=mapminmax('reverse',an,outputps);%% 結果分析figure(1) plot(BPoutput,':og') hold on plot(output_test,'-*'); legend('預測輸出','期望輸出') title('BP網絡預測輸出','fontsize',12) ylabel('函數輸出','fontsize',12) xlabel('樣本','fontsize',12) %預測誤差 error=BPoutput-output_test;figure(2) plot(error,'-*') title('BP網絡預測誤差','fontsize',12) ylabel('誤差','fontsize',12) xlabel('樣本','fontsize',12)figure(3) plot((output_test-BPoutput)./BPoutput,'-*'); title('神經網絡預測誤差百分比')errorsum=sum(abs(error));web browser www.matlabsky.com總結
以上是生活随笔為你收集整理的BP神经网络 语音信号分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB图像函数 块和邻域的处理
- 下一篇: Prod 函数