BP人工神经网络算法的MATLAB实现

合集下载

(完整版)BP神经网络matlab实例(简单而经典).doc

(完整版)BP神经网络matlab实例(简单而经典).doc

p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % 原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx'); %设置网络,建立相应的BP 网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM 算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn);anew=postmnmx(anewn,mint,maxt); %对 BP 网络进行仿真%还原数据y=anew';1、 BP 网络构建(1)生成 BP 网络net newff ( PR,[ S1 S2...SNl],{ TF1 TF 2...TFNl }, BTF , BLF , PF ) PR :由R 维的输入样本最小最大值构成的R 2 维矩阵。

[ S1 S2...SNl] :各层的神经元个数。

{TF 1 TF 2...TFNl } :各层的神经元传递函数。

BTF :训练用函数的名称。

(2)网络训练[ net,tr ,Y, E, Pf , Af ] train (net, P, T , Pi , Ai ,VV , TV )(3)网络仿真[Y, Pf , Af , E, perf ] sim(net, P, Pi , Ai ,T ){'tansig','purelin'},'trainrp'BP 网络的训练函数训练方法梯度下降法有动量的梯度下降法自适应 lr 梯度下降法自适应 lr 动量梯度下降法弹性梯度下降法训练函数traingd traingdm traingda traingdx trainrpFletcher-Reeves 共轭梯度法traincgf Ploak-Ribiere 共轭梯度法traincgpPowell-Beale 共轭梯度法traincgb 量化共轭梯度法trainscg 拟牛顿算法trainbfg 一步正割算法trainoss Levenberg-Marquardt trainlmBP 网络训练参数训练参数net.trainParam.epochsnet.trainParam.goal net.trainParam.lrnet.trainParam.max_fail net.trainParam.min_grad net.trainParam.show net.trainParam.timenet.trainParam.mc net.trainParam.lr_inc 参数介绍最大训练次数(缺省为10)训练要求精度(缺省为0)学习率(缺省为0.01 )最大失败次数(缺省为5)最小梯度要求(缺省为1e-10)显示训练迭代过程( NaN 表示不显示,缺省为 25)最大训练时间(缺省为inf )动量因子(缺省0.9)学习率lr增长比(缺省为1.05)训练函数traingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingdm 、 traingdx traingda 、traingdxnet.trainParam.lr_dec 学习率 lr 下降比(缺省为 0.7) traingda 、 traingdxnet.trainParam.max_perf_inc 表现函数增加最大比(缺省traingda 、 traingdx为 1.04)net.trainParam.delt_inc 权值变化增加量(缺省为trainrp1.2)net.trainParam.delt_dec 权值变化减小量(缺省为trainrp0.5)net.trainParam.delt0 初始权值变化(缺省为 0.07) trainrpnet.trainParam.deltamax 权值变化最大值(缺省为trainrp50.0)net.trainParam.searchFcn 一维线性搜索方法(缺省为traincgf 、traincgp 、traincgb 、srchcha)trainbfg 、 trainossnet.trainParam.sigma 因为二次求导对权值调整的trainscg影响参数(缺省值 5.0e-5)mbda Hessian 矩阵不确定性调节trainscg参数(缺省为 5.0e-7)net.trainParam.men_reduc 控制计算机内存/ 速度的参trainlm量,内存较大设为1,否则设为 2(缺省为 1)net.trainParam.mu 的初始值(缺省为0.001) trainlmnet.trainParam.mu_dec 的减小率(缺省为0.1)trainlmnet.trainParam.mu_inc 的增长率(缺省为10)trainlmnet.trainParam.mu_max 的最大值(缺省为1e10)trainlm2、 BP 网络举例举例 1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用 minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)BP 神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

(完整版)BP神经网络matlab实例(简单而经典)

(完整版)BP神经网络matlab实例(简单而经典)

p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络=net newff PR S S SNl TF TF TFNl BTF BLF PF(,[1 2...],{ 1 2...},,,)PR:由R维的输入样本最小最大值构成的2R⨯维矩阵。

S S SNl:各层的神经元个数。

[ 1 2...]{ 1 2...}TF TF TFNl:各层的神经元传递函数。

BTF:训练用函数的名称。

(2)网络训练[,,,,,] (,,,,,,)=net tr Y E Pf Af train net P T Pi Ai VV TV(3)网络仿真=[,,,,] (,,,,)Y Pf Af E perf sim net P Pi Ai T{'tansig','purelin'},'trainrp'2、BP网络举例举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)举例2、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

基于MATLAB的BP人工神经网络设计

基于MATLAB的BP人工神经网络设计

浙江大学出版社 ! 杨 健 刚- 人 工 神 经 网 络 实 用 教 程- 杭 州 : , !,,’ , ’ 杨 竹 清 - "#$%#&<-) 辅 助 神 经 网 络 设 计 - 北 京 : 电 ; 柳林, 子工业出版社, !,,; , ’-
7 调 用 >4?00 函 数 建 立 输 入 层 为 ) 个 神 经 元 、 中 间 层 为 ’) 个 神 经
网络的应用 假定有以下四组输入数据, 如表 ! 所示:
将其数据输入训练好的神经网络可以得到以下结果如 图 !。
本文在各层间采用的传递函数为 / 形函数,因为其具 有完成分类的非线形特征,有具有实现误差计算所需要的 可微特性, 而且比较接近于人工神经元的输入—输出特点。 其函数表达式为: ( 0 1 )2
( C )从 后 向 前 计 算 隐 含 层 的 误 差 信 号 " ( ) " ,=?< ,= &B< ,= ! ! ,+ " ;
,=
&(4 %’ 神 经 网 络 算 法 的 数 学 描 述
一个隐含层、 输出层和非线 %’ 神 经 网 络 是 由 输 入 层 、 性兴奋函数 ( 51/6.17 )组 成 的 三 层 感 知 器 网 络 。 它是在导师 指导下适合于多层神经元网络的一种学习,建立在梯度算 法的基础之上。 这种网络对于输入信息, 要先向前传播到隐 含层的节点上, 经 过 各 单 元 的 特 性 为 51/6.17 型 的 激 活 函 数 运算后, 把隐含节点的输出信息传播到输出节点, 最后给出 输出结果。 网络的学习过程由正向和反向传播两部分组成: 在正向传播过程中,每一层的神经元的状态只影响下一层 的神经元网络;如果输出层不能得出期望输出即实际输出 值与期望输出值之间有误差, 那么转入反向传播过程, 将误

BP神经网络原理及其MATLAB应用

BP神经网络原理及其MATLAB应用

BP神经网络原理及其MATLAB应用BP神经网络(Back Propagation Neural Network)是一种基于梯度下降算法的人工神经网络模型,具有较广泛的应用。

它具有模拟人类神经系统的记忆能力和学习能力,可以用来解决函数逼近、分类和模式识别等问题。

本文将介绍BP神经网络的原理及其在MATLAB中的应用。

BP神经网络的原理基于神经元间的权值和偏置进行计算。

一个标准的BP神经网络通常包含三层:输入层、隐藏层和输出层。

输入层负责接收输入信息,其节点数与输入维度相同;隐藏层用于提取输入信息的特征,其节点数可以根据具体问题进行设定;输出层负责输出最终的结果,其节点数根据问题的要求决定。

BP神经网络的训练过程可以分为前向传播和反向传播两个阶段。

前向传播过程中,输入信息逐层传递至输出层,通过对神经元的激活函数进行计算,得到神经网络的输出值。

反向传播过程中,通过最小化损失函数的梯度下降算法,不断调整神经元间的权值和偏置,以减小网络输出与实际输出之间的误差,达到训练网络的目的。

在MATLAB中,可以使用Neural Network Toolbox工具箱来实现BP神经网络。

以下是BP神经网络在MATLAB中的应用示例:首先,需导入BP神经网络所需的样本数据。

可以使用MATLAB中的load函数读取数据文件,并将其分为训练集和测试集:```data = load('dataset.mat');inputs = data(:, 1:end-1);targets = data(:, end);[trainInd, valInd, testInd] = dividerand(size(inputs, 1), 0.6, 0.2, 0.2);trainInputs = inputs(trainInd, :);trainTargets = targets(trainInd, :);valInputs = inputs(valInd, :);valTargets = targets(valInd, :);testInputs = inputs(testInd, :);testTargets = targets(testInd, :);```接下来,可以使用MATLAB的feedforwardnet函数构建BP神经网络模型,并进行网络训练和测试:```hiddenLayerSize = 10;net = feedforwardnet(hiddenLayerSize);net = train(net, trainInputs', trainTargets');outputs = net(testInputs');```最后,可以使用MATLAB提供的performance函数计算网络的性能指标,如均方误差、相关系数等:```performance = perform(net, testTargets', outputs);```通过逐步调整网络模型的参数和拓扑结构,如隐藏层节点数、学习率等,可以进一步优化BP神经网络的性能。

BP神经网络的MATLAB实现总结

BP神经网络的MATLAB实现总结

作者:陈克忠本文章数据来自于网络概述:本篇文章主要总结了运用MATLAB工具实现BP神经网络的预测功能的步骤,然后结合算例写出MATLAB程序。

1,步骤总结BP神经网络可以用来做时间序列的预测,下面给出用MATLAB实现预测的步骤。

1,整理原始数据2,将原始数据分为训练数据和测试数据两类3,分别对训练数据和测试数据进行归一化处理(关于为什么要归一化网上有很多解释)4,确定隐含成神经元个数,用MATLAB函数建立网络5,设置训练参数进行训练6,测试网络,即用训练好的网络来对一组数据进行预测7,将第6步得到的预测结果反归一化,得到与原始数据同一数量级的数据8,误差分析二,算例分析下面将结合算例运用MATLAB实现BP神经网络的预测。

1. 问题的描述公路运量主要包括公路的客运量和公路货运量两个方面。

公路运量主要包括公路的客运量和公路货运量两个方面。

据研究,某地区的公路运量主要与该地区的人数、研究,某地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,下图给出了某县1990-2009年20年的数据结合数据运用MATLAB工具建立BP神经网络对该县今后公路客运量和货运量进行预测。

程序如下:clearclc%%1,整理原始数据sqrts=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];%人口数量sqjdcs=[0.6 0.75 0.85 0.91 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];%机动车数量sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79];%公路面积glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462];%公路客运量glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];%公路货运量p=[sqrts;sqjdcs;sqglmj];%输入t=[glkyl;glhyl];%输出%%2,将原始数据分类为训练数据和测试数据p_train = p(:,1:19);t_train = t(:,1:19);p_test = p(:,20);t_test = t(:,20);%%3,归一化训练数据和测试数据[pn_train,minp,maxp,tn_train,mint,maxt]=premnmx(p_train,t_train);%将输入数据归一化pn_test=tramnmx(p_test,minp,maxp);%将测试数据归一化%4确定隐含层神经元个数,并建立网络n = 6;net = newff(pn_train,tn_train,n);%5设置网络参数%该案例运用默认参数%6训练网络net = train(net,pn_train,tn_train);%6运用测试数据仿真results=sim(net,pn_test);%对预测数据进行反归一化results=postmnmx(results,mint,maxt);%误差分析err = t_test – results %预测数据与真实数据之间的差值err2 = err./t_test %误差率plot(t_test,'b');hold onplot(results,'r');如图红线为预测值,蓝线为真实值年份 2004 2005 2006 2007 2008 2009 人口数量 47.30 52.89 55.73 56.76 59.17 60.63 机动车数量 2.50 2.60 2.702.85 2.953.10 公路面积 0.56 0.59 0.59 0.67 0.69 0.79 公路客运量 25107 33442 36836 40548 42927 43462 公路货运量 13320 16762 18673 20724 20803 21804。

BP_AI_神经网络MATLAB实现

BP_AI_神经网络MATLAB实现
delta_o(j,1) = err(j)*(1-Othi(j))*Othi(j);
end
E(i,1) = sqrt(E(i,1));
%计算隐层误差以及delta
%delta_s = sum(delta(k)*W(j,k)*Yj*(1-Yj))
BP_LEARN_D = BP_data;
%计算BP矩阵维数
[N,M] = size(BP_data);
P= N;
%方程为E
E = zeros(N,1);
%读取理想输出数据
Y = BP_LEARN_D(1:N,M-Y_num+1:M);
X = BP_LEARN_D(1:N,1:M-Y_num);
for j=1:1:sec_echo
for k = 1:1:Y_num
delta_s(j,1) = delta_o(k,1)*V(j,k);
end;
delta_s(j,1) = delta_s(j,1)*Ysec_f(j,1)*(ቤተ መጻሕፍቲ ባይዱ-Ysec_f(j,1));
end;
%计算delta_w以及delta_v
%delta_v = eta .*(delta_o*Y')'
%delta_w = eta .* (delta_s*X')'
delta_v = eta .*(delta_o*Ysec_f')';
delta_w = eta .*(delta_s*X(i,:))';
x_line = N;
x_row = M-Y_num;
%计算隐层节点输入,采用式凑法
%m=sqrt(n+l)+ a a取值(1:10)

BP神经网络matlab实现的基本步骤

1、数据归一化2、数据分类,主要包括打乱数据顺序,抽取正常训练用数据、变量数据、测试数据3、建立神经网络,包括设置多少层网络(一般3层以内既可以,每层的节点数(具体节点数,尚无科学的模型和公式方法确定,可采用试凑法,但输出层的节点数应和需要输出的量个数相等),设置隐含层的传输函数等。

关于网络具体建立使用方法,在后几节的例子中将会说到。

4、指定训练参数进行训练,这步非常重要,在例子中,将详细进行说明5、完成训练后,就可以调用训练结果,输入测试数据,进行测试6、数据进行反归一化7、误差分析、结果预测或分类,作图等数据归一化问题归一化的意义:首先说一下,在工程应用领域中,应用BP网络的好坏最关键的仍然是输入特征选择和训练样本集的准备,若样本集代表性差、矛盾样本多、数据归一化存在问题,那么,使用多复杂的综合算法、多精致的网络结构,建立起来的模型预测效果不会多好。

若想取得实际有价值的应用效果,从最基础的数据整理工作做起吧,会少走弯路的。

归一化是为了加快训练网络的收敛性,具体做法是:1 把数变为(0,1)之间的小数主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。

2 把有量纲表达式变为无量纲表达式归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量比如,复数阻抗可以归一化书写:Z = R + jωL = R(1 + jωL/R) ,复数部分变成了纯数量了,没有量纲。

另外,微波之中也就是电路分析、信号系统、电磁波传输等,有很多运算都可以如此处理,既保证了运算的便捷,又能凸现出物理量的本质含义。

神经网络归一化方法:由于采集的各数据单位不一致,因而须对数据进行[-1,1]归一化处理,归一化方法主要有如下几种,供大家参考:1、线性函数转换,表达式如下:复制内容到剪贴板代码:y=(x-MinValue)/(MaxValue-MinValue)说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。

BP人工神经网络及matlab实现

logsig()
功能 对数Sigmoid激活函数 格式 a = logsig(N) 说明对数Sigmoid函数把神经元
的输入范围从(-∞,+∞)映射到(0, 1)。它是可导函数,适用于BP训 练的神经元。
5-4 一个简单的例子
下表为某药品的销售情况,现构建一个如下的三层BP神经网 络对药品的销售进行预测:输入层有三个结点,隐含层结点数为5, 隐含层的激活函数为tansig;输出层结点数为1个,输出层的激活 函数为logsig,并利用此网络对药品的销售量进行预测,预测方法 采用滚动预测方式,即用前三个月的销售量来预测第四个月的销 售量,如用1、2、3月的销售量为输入预测第4个月的销售量,用2、 3、4月的销售量为输入预测第5个月的销售量.如此反复直至满足预 测精度要求为止。
e = e yio who yio who
p
(
yio(k)= who
h
whohoh(k)-bo)
who
=hoh(k)
e
yio
=(12oq=1(do(k)-yoo(k)))2 yio
=-(do(k)-yoo(k))yoo
(k)
=-(do(k)-yoo(k))f(yio(k)) -o(k)
5-2 BP网络的学习算法
情况二的直观表达
当误差对权值的偏导数 小于零时,权值调整量 为正,实际输出少于期 望输出,权值向增大方 向调整,使得实际输出 与期望输出的差减少。
e
who
w
e
h
o
<0,
此时Δwho>0
演示
BP算法 手控
5-3 BP神经网络的重要函数和基本功能
5-3-1 BP神经网络的重要函数
函数名 newff() tansig() logsig() traingd()

BP神经网络实验详解(MATLAB实现)

BP神经网络实验详解(MATLAB实现)BP(Back Propagation)神经网络是一种常用的人工神经网络结构,用于解决分类和回归问题。

在本文中,将详细介绍如何使用MATLAB实现BP神经网络的实验。

首先,需要准备一个数据集来训练和测试BP神经网络。

数据集可以是一个CSV文件,每一行代表一个样本,每一列代表一个特征。

一般来说,数据集应该被分成训练集和测试集,用于训练和测试模型的性能。

在MATLAB中,可以使用`csvread`函数来读取CSV文件,并将数据集划分为输入和输出。

假设数据集的前几列是输入特征,最后一列是输出。

可以使用以下代码来实现:```matlabdata = csvread('dataset.csv');input = data(:, 1:end-1);output = data(:, end);```然后,需要创建一个BP神经网络模型。

可以使用MATLAB的`patternnet`函数来创建一个全连接的神经网络模型。

该函数的输入参数为每个隐藏层的神经元数量。

下面的代码创建了一个具有10个隐藏神经元的单隐藏层BP神经网络:```matlabhidden_neurons = 10;net = patternnet(hidden_neurons);```接下来,需要对BP神经网络进行训练。

可以使用`train`函数来训练模型。

该函数的输入参数包括训练集的输入和输出,以及其他可选参数,如最大训练次数和停止条件。

下面的代码展示了如何使用`train`函数来训练模型:```matlabnet = train(net, input_train, output_train);```训练完成后,可以使用训练好的BP神经网络进行预测。

可以使用`net`模型的`sim`函数来进行预测。

下面的代码展示了如何使用`sim`函数预测测试集的输出:```matlaboutput_pred = sim(net, input_test);```最后,可以使用各种性能指标来评估预测的准确性。

基于MATLAB的BP人工神经网络设计

基于MATLAB的BP人工神经网络设计目录
一、介绍1
1.1研究背景1
1.2BP神经网络1
二、BP神经网络的设计3
2.1BP神经网络模型原理3
2.2BP神经网络模型参数5
2.3权重偏置矩阵更新方法6
三、MATLAB实现BP神经网络8
3.1MATLAB软件环境8
3.2代码实现8
3.3实验结果10
四、结论及展望12
一、介绍
1.1研究背景
人工神经网络(ANNs)被归类为一种模拟生物神经网络的模型,具有高度学习能力和自适应性,用于解决有关模式识别、拟合曲线、识别图像、辨识声音、推理、预测等问题。

在这些任务中,Backpropagation (BP)神
经网络是应用最广泛的神经网络结构。

BP神经网络是一种反向传播的多
层前馈神经网络,它的结构简单、计算方法有效,可以学习训练集的特征,在测试集上取得较好的精度。

1.2BP神经网络
BP神经网络(或叫反向传播网络,BP网络)是一种多层前馈神经网络,它是由对神经网络训练的单步算法“反向传播算法”δ开发的。

BP神经
网络由输入层、隐层和输出层构成,它将被调节的参数及权值分配给每个
网络层,以调整网络性能的训练过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%% 清空环境变量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';
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); 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。

相关文档
最新文档