日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

BP神经网络 语音信号分类

發(fā)布時間:2025/4/16 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BP神经网络 语音信号分类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

BP神經(jīng)網(wǎng)絡(luò)預(yù)測首先進(jìn)行訓(xùn)練網(wǎng)絡(luò),通過訓(xùn)練使網(wǎng)絡(luò)具有聯(lián)想記憶和預(yù)測能力,

BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程包括下面:

1、網(wǎng)絡(luò)的初始化,根據(jù)系統(tǒng)輸入和輸出確定網(wǎng)路的輸入層節(jié)點(diǎn)數(shù)n,隱含層l,和輸出層m,初始化輸入層隱含層和輸出層之間的連接權(quán)值和偏移,給定學(xué)習(xí)速率和激勵函數(shù)


2、隱含層輸出的計算,根據(jù)輸入向量x,輸入層和隱含層之間連接的權(quán)重w,以及隱含層閾值a,計算隱含層的輸出H

3、輸出層的輸出計算,,,根據(jù)隱含層的輸出,連接權(quán)值和偏移 ?計算出神經(jīng)網(wǎng)絡(luò)的輸出

4、計算誤差, ? ? 計算神經(jīng)網(wǎng)絡(luò)預(yù)測輸出值和期望輸出值之間的誤差e

5、權(quán)值的更新









在進(jìn)行程序之前 需要對數(shù)據(jù)進(jìn)行處理,


數(shù)據(jù)的歸一化是在數(shù)據(jù)處理時常用的方法,吧所有的數(shù)據(jù)轉(zhuǎn)化到【0 1】之間,這樣的目的主要是消除各個數(shù)據(jù)間的數(shù)量級差別,避免因?yàn)閿?shù)據(jù)數(shù)量級之間的差別導(dǎo)致的誤差增大;


常用的方法有兩種:

1 x=(X-Xmin)/(Xmax-Xmin);

Xmin ?Xmax分別為數(shù)據(jù)的最大和最小值

2\x=(X-Xmean)/Xvar;

Xmean表示數(shù)據(jù)的均值,,Xvar表示數(shù)據(jù)的方差


在實(shí)際中可以直接調(diào)用函數(shù) ?mapminmax(X) ? ? 直接處理數(shù)據(jù)

【X in]=mapminmax(X) ? ? ? ? ? ? ? ? ? ? ? ? ? ?--------------------------------------in指的是歸一化得到的結(jié)構(gòu)體,包含著數(shù)據(jù)的最大值最小值,平均值等信息,,用于測試數(shù)據(jù)中

想要把數(shù)據(jù)反之過來可以

X=mapminmax('apply',x,in) ? ? ? ? ------------------對測試數(shù)據(jù)的歸一化 嗎,根據(jù)in的值對數(shù)據(jù)進(jìn)行歸一化,

X=mapminmax('reverse',x,on)

<span style="font-size:18px;">%% 該代碼為基于BP網(wǎng)絡(luò)的語言識別%% 清空環(huán)境變量 clc clear%% 訓(xùn)練數(shù)據(jù)預(yù)測數(shù)據(jù)提取及歸一化%下載四類語音信號 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間隨機(jī)排序 k=rand(1,2000); [m,n]=sort(k);%輸入輸出數(shù)據(jù) 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%隨機(jī)提取1500個樣本為訓(xùn)練樣本,500個樣本為預(yù)測樣本 input_train=input(n(1:1500),:)'; output_train=output(n(1:1500),:)'; input_test=input(n(1501:2000),:)'; output_test=output(n(1501:2000),:)';%輸入數(shù)據(jù)歸一化 [inputn,inputps]=mapminmax(input_train);%% 網(wǎng)絡(luò)結(jié)構(gòu)初始化 innum=24; midnum=25; outnum=4;%權(quán)值初始化 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;%學(xué)習(xí)率 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);%% 網(wǎng)絡(luò)訓(xùn)練 E=zeros(1,loopNumber); for ii=1:loopNumberE(ii)=0;for i=1:1:1500%% 網(wǎng)絡(luò)預(yù)測輸出 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;%% 權(quán)值閥值修正%計算誤差e=output_train(:,i)-yn; E(ii)=E(ii)+sum(abs(e));%計算權(quán)值變化率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%% 結(jié)果分析 %根據(jù)網(wǎng)絡(luò)輸出找出數(shù)據(jù)屬于哪類 output_fore=zeros(1,500); for i=1:500output_fore(i)=find(fore(:,i)==max(fore(:,i))); end%BP網(wǎng)絡(luò)預(yù)測誤差 error=output_fore-output1(n(1501:2000))';%畫出預(yù)測語音種類和實(shí)際語音種類的分類圖 figure(1) plot(output_fore,'r') hold on plot(output1(n(1501:2000))','b') legend('預(yù)測語音類別','實(shí)際語音類別')%畫出誤差圖 figure(2) plot(error) title('BP網(wǎng)絡(luò)分類誤差','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>



調(diào)用函數(shù)版本:

%% 清空環(huán)境變量 clc clear%% 訓(xùn)練數(shù)據(jù)預(yù)測數(shù)據(jù)提取及歸一化 %下載輸入輸出數(shù)據(jù) load data input output%從1到2000間隨機(jī)排序 k=rand(1,2000); [m,n]=sort(k);%找出訓(xùn)練數(shù)據(jù)和預(yù)測數(shù)據(jù) input_train=input(n(1:1900),:)'; output_train=output(n(1:1900)); input_test=input(n(1901:2000),:)'; output_test=output(n(1901:2000));%選連樣本輸入輸出數(shù)據(jù)歸一化 [inputn,inputps]=mapminmax(input_train); [outputn,outputps]=mapminmax(output_train);%% BP網(wǎng)絡(luò)訓(xùn)練 % %初始化網(wǎng)絡(luò)結(jié)構(gòu) net=newff(inputn,outputn,5);net.trainParam.epochs=100; net.trainParam.lr=0.1; net.trainParam.goal=0.00004;%網(wǎng)絡(luò)訓(xùn)練 net=train(net,inputn,outputn);%% BP網(wǎng)絡(luò)預(yù)測 %預(yù)測數(shù)據(jù)歸一化 inputn_test=mapminmax('apply',input_test,inputps);%網(wǎng)絡(luò)預(yù)測輸出 an=sim(net,inputn_test);%網(wǎng)絡(luò)輸出反歸一化 BPoutput=mapminmax('reverse',an,outputps);%% 結(jié)果分析figure(1) plot(BPoutput,':og') hold on plot(output_test,'-*'); legend('預(yù)測輸出','期望輸出') title('BP網(wǎng)絡(luò)預(yù)測輸出','fontsize',12) ylabel('函數(shù)輸出','fontsize',12) xlabel('樣本','fontsize',12) %預(yù)測誤差 error=BPoutput-output_test;figure(2) plot(error,'-*') title('BP網(wǎng)絡(luò)預(yù)測誤差','fontsize',12) ylabel('誤差','fontsize',12) xlabel('樣本','fontsize',12)figure(3) plot((output_test-BPoutput)./BPoutput,'-*'); title('神經(jīng)網(wǎng)絡(luò)預(yù)測誤差百分比')errorsum=sum(abs(error));web browser www.matlabsky.com

總結(jié)

以上是生活随笔為你收集整理的BP神经网络 语音信号分类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。