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

这篇具有很好参考价值的文章主要介绍了(转载)BP 神经网络的数据分类(matlab实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 本博客的完整代码获取:

MATLAB神经网络43个案例分析 - MATLAB & Simulink Books

1案例背景

1.1 BP神经网络概述

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

(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab

        图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。
(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab        步骤7: 判断算法迭代是否结束,若没有结束,返回步骤 2.

1.2语音特征信号识别

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

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

2模型建立

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

(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab

        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]之间的数,其目的是取消各维数据间数量级差别,避免因为输入输出数据数量级差别较大而造成网络预测误差较大。数据归一化的方法主要有以下两种

(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab

        本案例采用第一种数据归一化方法,归一化函数采用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所示。

(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab

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

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

(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab

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

4案例扩展

4.1隐含层节点数

        BP神经网络的隐含层节点数对BP神经网络预测精度有较大的影响:节点数太少,网络不能很好地学习,需要增加训练次数,训练的精度也受影响;节点数太多,训练时间增加,网络容易过拟合。最佳隐含层节点数选择可参考如下公式:
 (转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab

(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab (转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab

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

4.2附加动量方法

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

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神经网络进化初期较大,网络收敛迅速,随着学习过程的进行,学习率不断减小,网络趋于稳定。变学习率计算公式为

(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab(转载)BP 神经网络的数据分类(matlab实现),MATLAB神经网络43个案例分析,神经网络,分类,matlab文章来源地址https://www.toymoban.com/news/detail-576393.html

到了这里,关于(转载)BP 神经网络的数据分类(matlab实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【语音识别】BP神经网络语音特征信号分类【含Matlab源码 2338期】

    获取代码方式1: 完整代码已上传我的资源:【语音识别】基于matlab BP神经网络语音特征信号分类【含Matlab源码 2338期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏Matlab语音处理(初级版) 备注: 点击上面蓝色字体 付费专栏Matlab语音处理(初级版

    2024年02月21日
    浏览(46)
  • (转载)神经网络遗传算法函数极值寻优(matlab实现)

            对于未知的非线性函数,仅通过函数的输入输出数据难以准确寻找函数极值。这类问题可以通过神经网络结合遗传算法求解,利用神经网络的非线性拟合能力和遗传算法的非线性寻优能力寻找函数极值。本章用神经网络遗传算法寻优如下非线性函数极值,该函数表达式

    2024年02月16日
    浏览(43)
  • BP神经网络理解及其MATLAB实现

    BP(Back Propagation)网络是一种 按误差逆传播 算法训练的多层前馈网络,是应用最广泛的神经网络模型之一。BP能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用 最速下降法 ,通过反向传播来不断调整网络的权值

    2024年02月06日
    浏览(55)
  • matlab实现BP神经网络(完整DEMO)

    本站原创文章,转载请说明来自《老饼讲解-BP神经网络》 www.bbbdata.com 目录 一、BP神经网络Demo代码    1.1 代码整体思路 1.2 BP神经网络Demo代码 二、运行结果    2.1 拟合曲线   2.2训练误差与预测误差 三、相关文章 3.1-BP的入门学习目录:老饼|BP神经网络-入门教程 3.2-BP的建模

    2024年02月05日
    浏览(42)
  • 机器学习及其MATLAB实现——BP神经网络

    本文章为学习MATLAB机器学习时所整理的内容,本篇文章是该系列第一篇,介绍了BP神经网络的基本原理及其MATLAB实现所需的代码,并且增加了一些个人理解的内容。 目录 人工神经网络概述 什么是人工神经网络? 人工神经元模型  神经网络可以分为哪些? BP神经网络概述 BP神

    2024年02月07日
    浏览(53)
  • BP神经网络入门(原理+matlab代码实现)

    对于很多刚入门的小伙伴来说,神经网络可能比较陌生。神经网络其实是对人认知物体的一种仿真。比如幼儿园老师再教小朋友认动物的时候,会让记住一些特征:比如兔子有长长的耳朵,爱吃萝卜和青菜.........,神经网络也是这样通过构建特征值之间的关系来预测一个较为可

    2023年04月23日
    浏览(48)
  • 【转载】基于Python+深度学习+神经网络实现高度可用的生活垃圾分类机器人程序

    设计一个基于深度学习的生活垃圾分类机器人软件系统,针对现实社会中产生的垃圾照片进行自动识别分类,对不同类别的垃圾,干垃圾,湿垃圾,可回收垃圾,有害垃圾等进行分类统计处理,减轻人工针对垃圾分类的工作量,提高垃圾分类的效率。 原文地址 本基于深度学

    2024年02月12日
    浏览(48)
  • 【MATLAB第58期】基于MATLAB的PCA-Kmeans、PCA-LVQ与BP神经网络分类预测模型对比

    基于UCI葡萄酒数据集进行葡萄酒分类及产地预测 共包含178组样本数据,来源于三个葡萄酒产地,每组数据包含产地标签及13种化学元素含量,即已知类别标签。 把样本集随机分为训练集和测试集(70%训练,30%测试),根据已有数据集训练一个能进行葡萄酒产地预测的模型,以

    2024年02月16日
    浏览(40)
  • BP神经网络回归预测MATLAB实现超详细

            哈喽!小伙伴们,接着上篇回归预测之支持向量机回归预测,今天给大家带来MATLAB实现bp神经网络回归预测,本文主要是陈述BP神经网络实现过程,不在对原理进行讲解啦。需要代码的小伙伴可以私聊我!无偿。接下来进入正题啦!         bp神经网络回归预测实

    2023年04月20日
    浏览(41)
  • Matlab使用BP和LVQ神经网络、图像处理技术三种方法实现人脸识别(附上完整仿真源码+数据)

    人脸识别是一种常见的生物特征识别技术,广泛应用于人脸门禁、人脸支付等领域。在人脸识别中,神经网络和图像处理技术是两种常用的方法。本文将介绍如何使用Matlab实现人脸识别,包括BP神经网络、LVQ神经网络和图像处理技术。 首先,我们将介绍BP神经网络的人脸识别

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包