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

news2024/11/29 10:49:15

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: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;
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:loopNumber
    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';
        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: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

%% 结果分析
%根据网络输出找出数据属于哪类
output_fore=zeros(1,500);
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;
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.coloradmin.cn/o/763487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务负载均衡器RibbonLoadBalancer实战

1.负载均衡介绍 负载均衡(Load Balance),其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同…

支付通道及系统设计

支付渠道,也可以叫支付通道,是指能够提供资金流转功能的通道,包括但不限于银行、第三方支付机构。我们常见的借记卡(储蓄卡)、贷记卡(信用卡)、微信、支付宝、云闪付等支付方式,都是…

re学习(18)[ACTF新生赛2020]rome1(Z3库+window远程调试)

参考视频: Jamiexu793的个人空间-Jamiexu793个人主页-哔哩哔哩视频 代码分析: 其主要内容在两个while循环中(从定义中可知flag位16个字符)。 看第二个循环,可知是比较result和经过第一个循环得到的v1比较(就是flag…

VXLAN在Linux上的实践

在笔记本上使用VMWare安装两台Ubunutu 22.04虚拟机,这两台虚拟机都桥接在一个物理网卡上,IP地址分别为192.168.31.113和192.168.31.131。 HOST1上的VXLAN配置如下: # ip link add vxlan0 type vxlan id 42 dstport 4789 remote 192.168.31.1…

什么是核心层?汇聚层?接入层

什么是核心层?汇聚层?接入层-百度经验 核心层: 核心层的功能主要是实现骨干网络之间的优化传输,骨干层设计任务的重点通常是冗余能力、可靠性和高速的传输。核心层一直被认为是所有流量的最终承受者和汇聚者,所以对核心层的设计以及网络设备…

STM32(HAL库)驱动GY30光照传感器通过串口进行打印

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 串口外设配置 2.4 项目生成 3、KEIL端程序整合 3.1 串口重映射 3.2 GY30驱动添加 3.3 主函数代 3.4 效果展示 1、简介 本文通过STM32F103C8T6单片机通过HAL库方…

gma 2.0.0a3 (2023.07.17) 更新日志

安装 gma 2.0.0a3 pip install gma2.0.0a3新增 1、为矢量要素(Feature)添加 【Difference】(差集)方法   取第一个矢量要素与第二个矢量要素的几何差集。  2、为矢量要素(Feature)添加几种几何形状测试…

springCloud通过两种方式配置热更新

该热更新实际就是通过改动nacos官网里面的配置管理的妹纸内容实现 定义一个config包,在该包下面复制该代码 package cn.itcast.user.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.spring…

如何实现以图搜图

一、前言 在许多搜索引擎中,都内置了以图搜图的功能。以图搜图功能,可以极大简化搜索工作。今天要做的就是实现一个以图搜图引擎。 我们先来讨论一下以图搜图的难点,首当其冲的就是如何对比图片的相似度?怎么样的图片才叫相似&a…

每天一道C语言编程:排队买票

题目描述 有M个小孩到公园玩,门票是1元。其中N个小孩带的钱为1元,K个小孩带的钱为2元。售票员没有零钱,问这些小孩共有多少种排队方法,使得售票员总能找得开零钱。注意:两个拿一元零钱的小孩,他们的位置互…

Windows 10快速启动怎么关闭?

有的用户电脑在开启快速启动后,发现电脑的开机速度确实变快了,但有的用户开启快速启动后开机速度反而变慢了,所以想关闭快速启动。那电脑快速启动怎么关闭? 快速启动与休眠 快速启动与电脑的休眠功能相似,但又有所不同…

获取网络包的硬件时间戳

转自:如何获取网络包的硬件时间戳_飞行的精灵的博客-CSDN博客 在一些应用中我们需要获取网路报文进出MAC的精准的时间戳。相比较于软件时间戳,硬件时间戳排除了系统软件引起的延时和抖动。如下图所示意: 下面我们使用北京飞灵科技有限公司开…

在命令行执行命令后出现 Permission denied 的问题解决

解决在项目目录安装一个有 “bin” 配置的依赖包后,执行 “bin” 命令,出现了 Permission denied 的问题。 问题 比如有这样一个包 json2playwright ,它的 package.json 中 “bin” 是: "bin": {"pince": &q…

如何让Vue项目本地运行的时候,同时支持http://localhost和http://192.168.X.X访问?

方法1:在package.json的"scripts":→ "dev":末尾追加 --host 0.0.0.0 方法2:将config\index.js的"dev":→ "host":修改为0.0.0.0

攻不下dfs不参加比赛(十八)

标题 为什么练dfs题目为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手低有的东…

CANoe-Symbol Mapping介绍

在CANoe的Environment菜单下有一个模块叫:Symbol Mapping。 打开后的界面为: 它的作用是: 在mapping对话框内,你可以映射系统变量、环境变量、信号、通信对象的值或分布式对象的成员以及系统变量的命名空间。当测量过程中源变量的值发生变化时,目标变量的值会自动设置。 你…

JDK安装

JDK安装 1、Windows环境下JDK的安装 1.1 下载 到 Java 的官网下载 JDK 安装包,下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择一个适合自己的 JDK 版本下载即可。 1.2 安装 通过双击软件并且点击下一步进行…

Fiddler抓包使用简介

目录 Fiddler简介 请求抓包 抓取PC端HTTPS请求 抓取移动端请求 请求查看 发送请求 Mock接口 断点调试 弱网模拟 请求重放 修改HOSTS 总结: Fiddler简介 Fiddler是一款免费的Windows平台的抓包工具,功能强大,使用简单。Fiddler抓…

【SCI征稿】老牌期刊2023年上涨质量高!中科院2/1区(TOP),国人发文友好!

您有一个评职称弯道超车的机会? 因为本期小编要推荐一本中科院2/1区(TOP)期刊,期刊质量不论是评职晋升求职毕业都是首选的好刊!究竟怎么回事?且看下文: 期刊简介: 影响因子&#…

传感器信息系统中的节能收集(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…