目录
💥1 概述
📚2 运行结果
🎉3 参考文献
👨💻4 Matlab代码
💥1 概述
BP神经网络是一种常见的人工神经网络,用于数据分类和回归等任务。在语音特征信号分类中,BP神经网络可以用于将语音信号的特征进行分类,比如将语音信号分成不同的语音类别,如说话人的声音、语音命令、语音识别等。
具体的步骤如下:
1. 数据预处理:首先,需要对语音信号进行预处理,包括信号采样、特征提取等。常用的特征提取方法包括梅尔频率倒谱系数(MFCC)、线性预测编码(LPC)等。
2. 数据标记:为了进行监督学习,需要对语音信号进行标记,即给每个语音样本打上对应的分类标签。
3. 构建神经网络:接下来,需要构建一个BP神经网络,用于训练和分类任务。神经网络包括输入层、隐藏层和输出层,其中输入层接收预处理后的语音特征信号,输出层给出对应的分类结果。
4. 训练网络:使用已标记的语音信号样本来训练BP神经网络。训练过程中,通过反向传播算法来调整网络的权重和偏置,以减小分类误差。
5. 测试和评估:训练完成后,使用未参与训练的语音信号样本来进行测试和评估,看网络在新数据上的分类效果如何。
6. 调优和优化:根据测试结果,可以对网络结构和超参数进行调优和优化,以提高分类的准确性。
需要注意的是,BP神经网络在语音信号分类中可能面临一些挑战,比如语音信号的时域和频域特性较为复杂,样本数据量可能不足等。因此,通常需要结合其他的处理方法和改进技术,比如深度学习中的卷积神经网络(CNN)和循环神经网络(RNN)等,来进一步提高分类效果。
本文采用的是最基本的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
🎉3 参考文献
[1]姜芃旭,傅洪亮.基于神经网络的语音情感识别分类[J].电脑知识与技术,2018,14(18):173-174.
部分理论引用网络文献,若有侵权联系博主删除。