(转载)BP 神经网络的数据分类(matlab实现)

news/2024/11/2 15:40:42/

1案例背景

1.1 BP神经网络概述

        BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。在前向传递中,输入信号从输人层经隐含层逐层处理,直至输出层。每一层的神经元状态只影响下一层神经元状态。如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值和阈值,从而使BP神经网络预测输出不断逼近期望输出。BP神经网络的拓扑结构如图1一1所示。

        图1-1中,X1,X2,…,Xn是BP神经网络的输入值,Y1,Y2,…,Ym是BP神经网络的预测值,wij和wjk为BP神经网络权值。从图1-1可以看出,BP神经网络可以看成一个非线性函数,网络输人值和预测值分别为该函数的自变量和因变量。当输入节点数为n、输出节点数为m时,BP神经网络就表达了从n个自变量到m个因变量的函数映射关系。
BP神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。BP神经网络的训练过程包括以下几个步骤。
        步骤1:网络初始化。根据系统输入输出序列(X,Y)确定网络输入层节点数n、隐含层节点数l,输出层节点数m,初始化输入层、隐含层和输出层神经元之间的连接权值wij,wjk初始化隐含层阈值a,输出层阈值b,给定学习速率和神经元激励函数。
        步骤2:隐含层输出计算。根据输入变量X,输入层和隐含层间连接权值wij以及隐含层阈值a,计算隐含层输出H。
        步骤7: 判断算法迭代是否结束,若没有结束,返回步骤 2.

1.2语音特征信号识别

        语音特征信号识别是语音识别研究领域中的一个重要方面,一般采用模式匹配的原理解决。语音识别的运算过程为:首先,待识别语音转化为电信号后输入识别系统,经过预处理后用数学方法提取语音特征信号,提取出的语音特征信号可以看成该段语音的模式;然后,将该段语音模型同已知参考模式相比较,获得最佳匹配的参考模式为该段语音的识别结果。语音识别流程如图1-2所示。

        本案例选取了民歌、古筝、摇滚和流行四类不同音乐,用BP神经网络实现对这四类音乐的有效分类。每段音乐都用倒谱系数法提取500组24维语音特征信号,提取出的语音特征信号如图1-3所示。 

2模型建立

        基于BP神经网络的语音特征信号分类算法建模包括BP神经网络构建、BP神经网络训练和 BP神经网络分类三步,算法流程如图1-4所示。

        BP 神经网络构建根据系统输入输出数据特点确定 BP 神经网络的结构,由于语音特征输入信号有24 维,待分类的语音信 共有 类,所以 BP 神经网络的结构为 24- 25-4  ,即输入 层有24 个节点 ,隐含层有 25 个节点,输出层有 个节点 BP神经网络训练用训练数据训练 BP 神经网络。共有2 000 组语音特征信号 ,从中随机 选择15 00 组数据作为训练数据训练网络, 500数据作为测试数据测试网络分类能力。BP 神经网络分类用训练好的神经网络对测试数据所属语音类别进行分类。

3 MATLAB实现

        根据BP神经网络理论,在 MATLAB软件中编程实现基于BP神经网络的语音特征信号分类算法。

3.1归一化方法及MATLAB函数

        数据归一化方法是神经网络预测前对数据常做的一种处理方法。数据归一化处理把所有数据都转化为[0,1]之间的数,其目的是取消各维数据间数量级差别,避免因为输入输出数据数量级差别较大而造成网络预测误差较大。数据归一化的方法主要有以下两种

        本案例采用第一种数据归一化方法,归一化函数采用MATLAB自带函数mapminmax,该函数有多种形式,常用的方法如下:

% input_train, output_train分别是训练输人、输出数据
[inputn,inputps] = mapminmax(input_train);
[outputn,outputps] = mapminmax(output_train);

input_train,output_train是训练输人,输出原始数据; inputn, outputn是归一化后的数据, inputps,outputps为数据归一化后得到的结构体,里面包含了数据最大值、最小值和平均值等信息,可用于测试数据归一化和反归一化。测试数据归一化和反归一化程序如下:

inputn_test = mapminmax('apply',input_test,inputps);%测试输入数据归一化
BPoutput = mapminmax(' reverse ',an, outputps);%网络预测数据反归一化

        input_test是预测输人数据;inputn_test是归一化后的预测数据;apply'表示根据inputps的值对input_test进行归一化。an是网络预测结果; outputps是训练输出数据归一化得到的结构体;BPoutput是反归一化之后的网络预测输出;'reverse'表示对数据进行反归一化。

        程序中,首先根据倒谱系数法提取四类音乐语音特征信号,不同的语音信号分别用1,2,3,4标识,提取出的信号分别存储于datal. mat, data2.mat, data3.mat,data4. mat数据库文件中,每组数据为25维,第1维为类别标识,后24维为语音特征信号。然后把四类语音特征信号合为一组,从中随机选取1500组数据作为训练数据,500组数据作为测试数据,并对训练数据进行归一化处理。根据语音类别标识设定每组语音信号的期望输出值,如标识类为1时,期望输出向量为[1 0 0 0]。

         完整matlab代码如下:
%% 该代码为基于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);
web browser www.matlabsky.com

3.6结果分析

        用训练好的BP神经网络分类语音特征信号测试数据,BP神经网络分类误差如图1-5所示。

图1-5 BP神经网络分类误差 

        BP神经网络分类正确率如下:

        从BP神经网络分类结果可以看出,基于BP神经网络的语音信号分类算法具有较高的准确性,能够准确识别出语音信号所属类别。

4案例扩展

4.1隐含层节点数

        BP神经网络的隐含层节点数对BP神经网络预测精度有较大的影响:节点数太少,网络不能很好地学习,需要增加训练次数,训练的精度也受影响;节点数太多,训练时间增加,网络容易过拟合。最佳隐含层节点数选择可参考如下公式:
 

 

        从图1-6可以看出,本案例中BP神经网络分类误差率随着隐含层节点数的增加而减小。对于一般问题来说,BP神经网络的分类误差随着隐含层节点数的增加呈现先减少后增加的趋势。

4.2附加动量方法

        BP神经网络的采用梯度修正法作为权值和阈值的学习算法,从网络预测误差的负梯度方向修正权值和阈值,没有考虑以前经验的积累,学习过程收敛缓慢。对于这个问题,可以采用附加动量方法来解决,带附加动量的权值学习公式为

xite,alfa为学习率
w1=w1_1+xitedw1'+alfa*(w1_1-w1_2);
b1=b1_1+xite*dbl'+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);

4.3变学习率学习算法

        BP神经网络学习率n的取值在[0,1]之间,学习率n越大,对权值的修改越大,网络学习速度越快。但过大的学习速率n将使权值学习过程产生震荡,过小的学习概率使网络收敛过慢,权值难以趋于稳定。变学习率方法是指学习概率┐在BP神经网络进化初期较大,网络收敛迅速,随着学习过程的进行,学习率不断减小,网络趋于稳定。变学习率计算公式为


http://www.ppmy.cn/news/922384.html

相关文章

WooCommerce适合企业电子商务吗?

目录 成功开展电子商务业务变得比以往任何时候都容易。市场上有几个现成的平台,完全有可能将一个初步的想法快速转变为在线贸易业务,并源源不断地收到订单。 什么是 WooCommerce? 为什么您应该考虑使用 WooCommerce 很灵活 重量轻且功…

网线水晶头制作的线序

1,准备工作 网线、水晶头、网线钳,测线仪测试 2,制作流程 1)用网线钳剥开网线的外皮10cm就可以; 2)把4股双绞线分开,按照B类线序做法:橙白橙、绿白蓝、蓝白绿、棕白棕,…

如何做网线的水晶头

背景知识整理 网线有两种排序,有两种排序,一种是T568A一种是T568B,我们一般做的直连网线就是用两头都用T568B的方式,如果要做一条电脑连电脑的网线需要做交叉网线,所谓的交叉网线就是一头是T568A另一头是T568B。 网线…

网线的制作报告

目录 一、工具/原料 二、方法/步骤 一、先认识下网线钳子,网线钳子的几个部分,图中标号。 ⑤为剪线刀片,切线用。 检查水晶头线序排列无误后把水晶头放入网线钳8P压线口内,按压网线钳手柄,听到“咔”的一声&#…

如何制作网线

如何制作网线 我们部门负责全公司的内网,所以办公室里有现成的制作网线的工具。平时看同事制作网线,我也想自己试一回。现将网线制作过程记录如下: 1. 准备材料,取一条适当长度的双绞线;若干个RJ45水晶头&#xff1b…

计算机实践课制作网线教案,制作网线教案.doc

《制作网线》教案 授课人: 谷城中等职业教育中心学校 孙百灵 时间:2017.10.25星期三 第1节 课程名称 计算机网络基础 授课班级 2017春级微机(1)班 授课类型 新授课 课 题 制作网线 课 时 1 学生人数 32 学情分析 本次课教学对象是2017春级微机(1)班的学…

计算机网络实践网线制作,网线怎么制作

RJ-45线的制作: 先准备好我们所需的工具:压线钳。 1。先抽出一小段线,然后把外皮剥除一段(长度大约为1。2-1。3厘米); 2。根据排线标准将双绞线反向缠绕开,现行的接线标准有t568a和t568B标准,平常用得较多的是t568B标准…

Ant Design Pro笔记

文章目录 参考资料初始化目录结构参考资料 Antd Pro食用笔记(一)——基本使用 初始化 两种途径: 一、npm等工具下载最新版本框架使用。 二、github官网地址找需要的版本并修改对应依赖。 默认下载最新版本 npm create umi