語音學習筆記9------Matlab R2015a實現BP神經網路的嗓音識別
本來博主應該要搞卷積神經網路的,但是由於博主是這方面的小
白,都是從0開始的,所以怕一口吃下去咽死,還是先從BP神經網
絡學起,後面的博文會陸陸續續推出實現卷積神經網路的嗓音識
別的。
1.1.1 BP 神經網路概述
BP 神經網路是一種多層前饋神經網路,該網路的主要特點是訊號前向傳遞,誤差反向傳
播。在前向傳遞中,輸入訊號從輸入層經隱含層逐層處理,直至輸出層。每一層的神經元狀態
隻影響下一層神經元狀態。如果輸出層得不到期望輸出,則轉入反向傳播,根據預測誤差調整
網路權值和閾值,從而使 BP 神經網路預測輸出不斷逼近期望輸出。 BP 神經網路的拓撲結構
BP 神經網路可以看成一個非線性函式,網路輸入值和預測值分別為該函式的自變數和因變數。
當輸入節點數為 n ,輸出節點數為
m 時, BP 神經網路就表達了從 n 個自變數到 m 個因變數的函式對映關係。
BP 神經網路預測前首先要訓練網路,通過訓練使網路具有聯想記憶和預測能力。 BP 神
經網路的訓練過程包括以下幾個步驟。
步驟 1 :網路初始化。根據系統輸入輸出序列( X ,Y )確定網路輸入層節點數 n 、隱含層節
點數 l ,輸出層節點數 m ,初始化輸入層、隱含層和輸出層神經元之間的連線權值 ω
ij,ωjk,初始化隱含層閾值 a ,輸出層閾值 b ,給定學習速率和神經元激勵函式。
步驟 2 :隱含層輸出計算。根據輸入向量 X ,輸入層和隱含層間連線權值 ωij
以及隱含層閾值 a ,計算隱含層輸出 H 。
步驟 3 :輸出層輸出計算。根據隱含層輸出 H ,連線權值 ωjk和閾值 b ,計算 BP 神經網路預測輸出 O 。
步驟 4 :誤差計算。根據網路預測輸出 O 和期望輸出 Y ,計算網路預測誤差 e 。
步驟 5 :權值更新。根據網路預測誤差 e 更新網路連線權值 ω
步驟 6 :閾值更新。根據網路預測誤差 e 更新網路節點閾值 a ,
步驟 7 :判斷演算法迭代是否結束,若沒有結束,返回步驟 2 。
1.1.2 語音特徵訊號識別
語音特徵訊號識別是語音識別研究領域中的一個重要方面,一般採用模式匹配的原理解
決。語音識別的運算過程為:首先,待識別語音轉化為電訊號後輸入識別系統,經過預處理後
用數學方法提取語音特徵訊號,提取出的語音特徵訊號可以看成該段語音的模式。然後將該
段語音模型同已知參考模式相比較,獲得最佳匹配的參考模式為該段語音的識別結果。語音
本案例選取了民歌、古箏、搖滾和流行四類不同音樂,用 BP 神經網路實現對這四類音樂
的有效分類。每段音樂都用倒譜系數法提取 500 組 24 維語音特徵訊號,提取出的語音特徵信
1.2 模型建立
BP 神經網路構建根據系統輸入輸出資料特點確定 BP 神經網路的結構,由於語音特徵輸
入訊號有 24 維,待分類的語音訊號共有 4 類,所以 BP 神經網路的結構為 24 — 25 — 4 ,即輸入
層有 24 個節點,隱含層有 25 個節點,輸出層有 4 個節點。
BP 神經網路訓練用訓練資料訓練 BP 神經網路。共有 2000 組語音特徵訊號,從中隨機
選擇 1500 組資料作為訓練資料訓練網路,500 組資料作為測試資料測試網路分類能力。
BP 神經網路分類用訓練好的神經網路對測試資料所屬語音類別進
號。BP 神經網路構建根據系統輸入輸出資料特點確定 BP 神經網
絡的結構,由於語音特徵輸入訊號有 24 維,待分類的語音訊號共有4
類,所以 BP 神經網路的結構為 24 — 25 — 4 ,即輸入層有 24 個節
點,隱含層有 25 個節點,輸出層有 4 個節點。BP 神經網路訓練用
訓練資料訓練 BP 神經網路。共有 2000 組語音特徵訊號,從中機
選擇 1500 組資料作為訓練資料訓練網路,500 組資料作為測試數
據測試網路分類能力。
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維
for i=1:2000
switch output1(i)
case 1
output(i,:)=[1 0 0 0];
case 2
output(i,:)=[0 1 0 0];
case 3
output(i,:)=[0 0 1 0];
case 4
output(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;
%% 網路訓練
for ii=1:10
E(ii)=0;
for i=1:1:1500
%% 網路預測輸出
x=inputn(:,i);
% 隱含層輸出
for j=1:1:midnum
I(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:midnum
S=1/(1+exp(-I(j)));
FI(j)=S*(1-S);
end
for k=1:1:innum
for j=1:1:midnum
dw1(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));
end
end
w1=w1_1+xite*dw1'+alfa*(w1_1-w1_2);
b1=b1_1+xite*db1'+alfa*(b1_1-b1_2);
w2=w2_1+xite*dw2'+alfa*(w2_1-w2_2);
b2=b2_1+xite*db2'+alfa*(b2_1-b2_2);
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);
for ii=1:1
for i=1:500%1500
%隱含層輸出
for j=1:1:midnum
I(j)=inputn_test(:,i)'*w1(j,:)'+b1(j);
Iout(j)=1/(1+exp(-I(j)));
end
fore(:,i)=w2'*Iout'+b2;
end
end
%% 結果分析
%根據網路輸出找出資料屬於哪類
for i=1:500
output_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-4
k=zeros(1,4);
%找出判斷錯誤的分類屬於哪一類
for i=1:500
if error(i)~=0
[b,c]=max(output_test(:,i));
switch c
case 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;
end
end
end
%找出每類的個體和
kk=zeros(1,4);
for i=1:500
[b,c]=max(output_test(:,i));
switch c
case 1
kk(1)=kk(1)+1;
case 2
kk(2)=kk(2)+1;
case 3
kk(3)=kk(3)+1;
case 4
kk(4)=kk(4)+1;
end
end
%正確率
rightridio=(kk-k)./kk
效果圖
不懂的可以加我的QQ群:522869126(語音訊號處理) 歡迎你
的到來哦,看了博文給點腳印唄,謝謝啦~~
相關文章
- 深度學習--基於卷積神經網路的歌唱嗓音識別深度學習卷積神經網路
- bp神經網路學習神經網路
- 《手寫數字識別》神經網路 學習筆記神經網路筆記
- 【原創】python實現BP神經網路識別Mnist資料集Python神經網路
- 幾種型別神經網路學習筆記型別神經網路筆記
- python對BP神經網路實現Python神經網路
- BP神經網路神經網路
- 語音學習筆記12------直觀理解深度學習與卷積神經網路筆記深度學習卷積神經網路
- 語音學習筆記14------卷積神經網路CNN引數說明筆記卷積神經網路CNN
- 深度學習與神經網路學習筆記一深度學習神經網路筆記
- 深度學習筆記------卷積神經網路深度學習筆記卷積神經網路
- 深度學習卷積神經網路筆記深度學習卷積神經網路筆記
- 全連線神經網路學習筆記神經網路筆記
- BP神經網路流程圖神經網路流程圖
- 卷積神經網路學習筆記——Siamese networks(孿生神經網路)卷積神經網路筆記
- 卷積神經網路學習筆記——SENet卷積神經網路筆記SENet
- 資料探勘---BP神經網路神經網路
- 《卷積神經網路的Python實現》筆記卷積神經網路Python筆記
- 吳恩達機器學習筆記 —— 9 神經網路學習吳恩達機器學習筆記神經網路
- Stanford機器學習課程筆記——神經網路學習機器學習筆記神經網路
- 詳解卷積神經網路(CNN)在語音識別中的應用卷積神經網路CNN
- 神經網路篇——從程式碼出發理解BP神經網路神經網路
- 語音學習筆記13------談談史丹佛大學卷積神經網路之反向傳播筆記卷積神經網路反向傳播
- 吳恩達《神經網路與深度學習》課程筆記(4)– 淺層神經網路吳恩達神經網路深度學習筆記
- 吳恩達《神經網路與深度學習》課程筆記(5)– 深層神經網路吳恩達神經網路深度學習筆記
- 為什麼說BP神經網路就是人工神經網路的一種?神經網路
- 機器學習——BP神經網路演算法機器學習神經網路演算法
- 深度學習筆記8:利用Tensorflow搭建神經網路深度學習筆記神經網路
- 神經網路:numpy實現神經網路框架神經網路框架
- 語音學習筆記8------Matlab R2015a常用快捷鍵筆記Matlab
- Andrew BP 神經網路詳細推導神經網路
- 【深度學習基礎-08】神經網路演算法(Neural Network)上--BP神經網路例子計算說明深度學習神經網路演算法
- Neural Networks and Deep Learning(神經網路與深度學習) - 學習筆記神經網路深度學習筆記
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 深度學習入門筆記(十八):卷積神經網路(一)深度學習筆記卷積神經網路
- 基於神經網路的OCR識別神經網路
- 【深度學習基礎-07】神經網路演算法(Neural Network)上--BP神經網路基礎理論深度學習神經網路演算法
- 【機器學習】搭建神經網路筆記機器學習神經網路筆記