BP神经网络例二(分类)
- 格式:doc
- 大小:588.00 KB
- 文档页数:15
基于MATLAB的BP神经网络应用人工神经网络(Artificial Neural Networks,NN)是由大量的、简单的处理单元(称为神经元)广泛地互相连接而形成的复杂网络系统,它反映了人脑功能的许多基本特征,是一个高度复杂的非线性动力学系统。
神经网络具有大规模并行、分布式存储和处理、自组织、自适应和自学习能力,特别适合处理需要同时考虑许多因素和条件的、不精确和模糊的信息处理问题。
神经网络的发展与神经科学、数理科学、认知科学、计算机科学、人工智能、信息科学、控制论、机器人学、微电子学、心理学、微电子学、心理学、光计算、分子生物学等有关,是一门新兴的边缘交叉学科。
神经网络具有非线性自适应的信息处理能力,克服了传统人工智能方法对于直觉的缺陷,因而在神经专家系统、模式识别、智能控制、组合优化、预测等领域得到成功应用。
神经网络与其他传统方法相组合,将推动人工智能和信息处理技术不断发展。
近年来,神经网络在模拟人类认知的道路上更加深入发展,并与模糊系统、遗传算法、进化机制等组合,形成计算智能,成为人工智能的一个重要方向。
MATLAB是一种科学与工程计算的高级语言,广泛地运用于包括信号与图像处理,控制系统设计,系统仿真等诸多领域。
为了解决神经网络问题中的研究工作量和编程计算工作量问题,目前工程领域中较为流行的软件MATLAB,提供了现成的神经网络工具箱(Neural Network Toolbox,简称NNbox),为解决这个矛盾提供了便利条件。
神经网络工具箱提供了很多经典的学习算法,使用它能够快速实现对实际问题的建模求解。
在解决实际问题中,应用MATLAB 语言构造典型神经网络的激活传递函数,编写各种网络设计与训练的子程序,网络的设计者可以根据需要调用工具箱中有关神经网络的设计训练程序,使自己能够从烦琐的编程中解脱出来,减轻工程人员的负担,从而提高工作效率。
一、人工神经网络的研究背景和意义人工神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
廷塑签凰.B P人工神经网络的原理及其应用焦志钦(华南理工大学,广东广州510000)f}商鞫人工神经网络是计算智能和机器学习研究中最活跃的分交之一。
本文对神经网络中的BP算法的原理做了详尽的阐述,并用M a da b 程序对其进行了应用。
表明它具有强大的拟合功能。
房;建闭B P算法;M adab1人工神经网络的发展人工神经网络是一个由多个简单神经元相互关联构成的能够实现某种特定功能的并行分布式处理器。
单个神经元由杈值、偏置值、净输^和传输函数组成。
多输入单神经元模型如图1—1所示。
岛见:●仇图1—1多输入单神经元模型其中P为输入值,w.为连接权值,b为偏置值,f似o√为传输函数。
神经元值n=w p+b,输出值为a=f M。
人工神经网络的第一个应用是感知机网络和联想学习规则。
不幸的是,后来研究表明基本的感知机网络只能解决有限的几类问题。
单层感知机只能解决线性分类问题。
不能解决异或问题,也不能解决非线性问题,因此就有单层感知机发展为多层感知机。
多层神经网络中—个重要的方法是B P算法。
BP网络属于多层前向网络,如图1—2所示:卫咒鼍旬k图卜2卵网络模型2B P算法B P网络计算方法如式(2—1)所示,为简化,将神经元的阈值8视为连接权值来处理,并令xo=go=ho=一1,故式(5-1)可以改写为式(2—2)。
92‘i互%蕾一8少j=I,2,…,,17也=,f∑峭一日.J j卢7,22,…,n2(2,1)^=,f2郴一日。
Jj卢7,,…,(2—1)心y,--f凭峭叫i j=1,2,…,n29=7i互w刚∥j=1,2,..’,几7^-f嚷郴一日小』=7,2,…,n2(2—2)M=f f三峭一日,Jj j=l,2,…,n2,=,B P算法是一种有导师的学习算法,这种算法通常是应用最速下降法。
图2—1描述了B P网络的一部分,其中包括工作信号(实线)和误差信号(虚线)两部分。
2002。
10。
1。
0。
’。
年。
BP神经网络分类/预测1. 数据预处理在训练神经网络前一般需要对数据进行预处理,一种重要的预处理手段是归一化处理。
下面简要介绍归一化处理的原理与方法。
(1) 什么是归一化?数据归一化,就是将数据映射到[0,1]或[-1,1]区间或更小的区间,比如(0.1,0.9) 。
(2) 为什么要归一化处理?<1>输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。
<2>数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小。
<3>由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。
例如神经网络的输出层若采用S形激活函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。
<4>S形激活函数在(0,1)区间以外区域很平缓,区分度太小。
例如S形函数f(X)在参数a=1时,f(100)与f(5)只相差0.0067。
(3) 归一化算法一种简单而快速的归一化算法是线性转换算法。
线性转换算法常见有两种形式:<1>y = ( x - min )/( max - min )其中min为x的最小值,max为x的最大值,输入向量为x,归一化后的输出向量为y 。
上式将数据归一化到[ 0 , 1 ]区间,当激活函数采用S形函数时(值域为(0,1))时这条式子适用。
<2>y = 2 * ( x - min ) / ( max - min ) - 1这条公式将数据归一化到[ -1 , 1 ] 区间。
当激活函数采用双极S形函数(值域为(-1,1))时这条式子适用。
(4) Matlab数据归一化处理函数归一化处理数据可以采用premnmx,postmnmx,tramnmx这3个函数。
<1>premnmx语法:[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t)pn:p矩阵按行归一化后的矩阵minp,maxp:p矩阵每一行的最小值,最大值tn:t矩阵按行归一化后的矩阵mint,maxt:t矩阵每一行的最小值,最大值作用:将矩阵p,t归一化到[-1,1] ,主要用于归一化处理训练数据集。
BP神经网络数学原理及推导过程BP神经网络(Backpropagation Neural Network),也称为反向传播神经网络,是一种常见的人工神经网络模型,主要用于解决回归和分类问题。
它在数学上涉及到多元微积分、线性代数和概率论等方面的知识。
本文将从数学原理和推导过程两个方面进行阐述。
一、数学原理:1. 激活函数(Activation Function):激活函数是神经网络中非线性变换的数学函数,用于引入非线性因素,增加神经网络的表达能力。
常见的激活函数有Sigmoid函数、ReLU函数等。
2. 前向传播(Forward Propagation):神经网络的前向传播是指将输入数据从输入层依次传递到输出层的过程。
在前向传播中,每个神经元接收上一层神经元传递过来的激活值和权重,计算出当前神经元的输出值,并将输出值传递给下一层神经元。
3. 反向传播(Backward Propagation):神经网络的反向传播是指根据损失函数的值,从输出层开始,沿着网络的反方向不断调整神经元的权重,以达到最小化损失函数的目的。
在反向传播中,通过链式法则计算每个神经元对损失函数的导数,进而利用梯度下降算法更新权重。
4. 误差函数(Error Function):误差函数用于衡量神经网络输出结果和真实值之间的差异,常见的误差函数有均方差(Mean Squared Error)函数和交叉熵(Cross Entropy)函数。
5.权重更新规则:反向传播算法中的核心部分就是权重的更新。
权重更新通常采用梯度下降算法,通过计算损失函数对权重的偏导数,按照负梯度方向更新权重值,使得损失函数逐渐减小。
二、推导过程:下面将以一个简单的多层感知机为例,推导BP神经网络的权重更新规则。
假设我们有一个三层的神经网络,第一层为输入层,第二层为隐藏层,第三层为输出层,隐藏层和输出层都使用Sigmoid激活函数。
1.前向传播:首先,我们根据输入层的输入值X和权重W1,计算隐藏层的输入值H1:H1=X*W1然后,将隐藏层的输入值H1带入到Sigmoid函数中,得到隐藏层的输出值A1:A1=σ(H1)接下来,根据隐藏层的输出值A1和权重W2,计算输出层的输入值H2:H2=A1*W2最后,将输出层的输入值H2带入到Sigmoid函数中,得到输出层的输出值A2:A2=σ(H2)2.反向传播:设输出层的输出值为Y,隐藏层的输出值为A1,损失函数为L。
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);```最后,可以使用各种性能指标来评估预测的准确性。
BP神经⽹络的数据分类BP 神经⽹络的数据分类——语⾳特征信号分类1. BP神经⽹络是⼀种多层前馈神经⽹络,该⽹络的主要特点是信号前向传递,误差反向传播。
在前向传递中,输⼊信号从输⼊层经隐含层逐层处理,直⾄输出层. 每⼀层的神经元状态只影响下⼀层神经元状态。
如果输出层得不到期望输出,则转⼊反向传播, 根据预测误差调整⽹络权值和阔值,从⽽使BP 神经⽹络预测输出不断逼近期望输出。
2. 语⾳特征信号识别是语⾳识别研究领域中的⼀个重要⽅⾯, ⼀般采⽤模式匹配的原理解决。
语⾳识别的运算过程为:⾸先,待识别语⾳转化为电信号后输⼊识别系统,经过预处理后⽤数学⽅法提取语⾳特征信号,提取出的语⾳特征信号可以看成该段语⾳的模式E 然后,将该段语⾳模型罔已知参考模式相⽐较,获得最佳匹配的参考模式为该段语⾳的识别结果。
3. 本代码选取了民歌、古筝、摇滚和流⾏四类不同⾳乐, ⽤BP 神经⽹络实现对这四类⾳乐的有效分类。
每段⾳乐都⽤倒谱系费⽴法提取500 组24 维语⾳特征信号。
4. BP 神经⽹络构建根据系统输⼊输出数据特点确定BP 神经⽹络的结构,由于语⾳特征输⼊信号有24 维,待分类的语⾳信号共有4类,所以BP 神经⽹络的结构为24-25-4 ,即输⼊层有24 个节点,隐含层有25 个节点,输出层有4 个节点。
BP 神经⽹络训练⽤训练数据训练BP 神经⽹络。
共有2 000 组语⾳特征信号,从中随机选择1 5 00 组数据作为训练数据训练⽹络, 5 00 组数据作为测试数据测试⽹络分类能⼒。
BP 神经⽹络分类⽤训练好的神经⽹络对测试数据所属语⾳类别进⾏分类。
算法流程图为:5. 程序实现%% 该代码为基于BP⽹络的语⾔识别%% 清空环境变量clcclear%% 训练数据预测数据提取及归⼀化%下载四类语⾳信号load data1 c1load data2 c2load data3 c3load 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];endend%随机提取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);endfor 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;w2_2=w2_1;w2_1=w2;b1_2=b1_1;b1_1=b1;b2_2=b2_1;b2_1=b2;endend%% 语⾳特征信号分类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;endend%% 结果分析%根据⽹络输出找出数据属于哪类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 onplot(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 1k(1)=k(1)+1;case 2k(2)=k(2)+1;case 3k(3)=k(3)+1;case 4k(4)=k(4)+1;endendend%找出每类的个体和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 4case 4kk(4)=kk(4)+1; endend%正确率rightridio=(kk-k)./kk; disp('正确率')disp(rightridio);6.点击7.结果如下图。
BP神经⽹络 百度百科 在⼈⼯神经⽹络发展历史中,很长⼀段时间⾥没有找到隐层的连接权值调整问题的有效算法。
直到误差反向传播算法(BP 算法)的提出,成功地解决了求解⾮线性连续函数的多层前馈神经⽹络权重调整问题。
BP (Back Propagation)神经⽹络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。
输⼊层各神经元负责接收来⾃外界的输⼊信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能⼒的需求,中间层可以设计为单隐层或者多隐层结构;最后⼀个隐层传递到输出层各神经元的信息,经进⼀步处理后,完成⼀次学习的正向传播处理过程,由输出层向外界输出信息处理结果。
当实际输出与期望输出不符时,进⼊误差的反向传播阶段。
误差通过输出层,按误差梯度下降的⽅式修正各层权值,向隐层、输⼊层逐层反传。
周⽽复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经⽹络学习训练的过程,此过程⼀直进⾏到⽹络输出的误差减少到可以接受的程度,或者预先设定的学习次数为⽌。
BP神经⽹络模型BP⽹络模型包括其输⼊输出模型、作⽤函数模型、误差计算模型和⾃学习模型。
(1)节点输出模型 隐节点输出模型:Oj=f(∑Wij×Xi-qj) (1) 输出节点输出模型:Yk=f(∑Tjk×Oj-qk) (2) f-⾮线形作⽤函数;q -神经单元阈值。
图1 典型BP⽹络结构模型 (2)作⽤函数模型 作⽤函数是反映下层输⼊对上层节点刺激脉冲强度的函数⼜称刺激函数,⼀般取为(0,1)内连续取值Sigmoid函数:f(x)=1/(1+e) (3) (3)误差计算模型 误差计算模型是反映神经⽹络期望输出与计算输出之间误差⼤⼩的函数: Ep=1/2×∑(tpi-Opi) (4) tpi- i节点的期望输出值;Opi-i节点计算输出值。
(4)⾃学习模型 神经⽹络的学习过程,即连接下层节点和上层节点之间的权重拒阵Wij的设定和误差修正过程。
神经网络作业作业说明第一题(函数逼近):BP网络和RBF网络均是自己编写的算法实现。
BP网络均采用的三层网络:输入层(1个变量)、隐层神经元、输出层(1个变量)。
转移函数均为sigmoid函数,所以没有做特别说明。
在第1小题中贴出了BP和RBF的Matlab代码,后面的就没有再贴出;而SVM部分由于没有自己编写,所以没有贴出。
而针对其所做的各种优化或测试,都在此代码的基础上进行,相应参数的命名方式也没有再改变。
RBF网络使用了聚类法和梯度法两种来实现。
而对于SVM网络,在后面两题的分类应用中都是自己编写的算法实现,但在本题应用于函数逼近时,发现效果很差,所以后来从网上下载到一个SVM工具包LS-SVMlab1.5aw,调用里面集成化的函数来实现的,在本题函数逼近中均都是采用高斯核函数来测试的。
第二题(分类):BP网络和RBF网络都是使用的Matlab自带的神经网络工具包来实现的,不再贴出代码部分。
而SVM网络则是使用的课上所教的算法来实现的,分别测试了多项式核函数和高斯核函数两种实现方法,给出了相应的Matlab代码实现部分。
第三题:由于问题相对简单,所以就没有再使用Matlab进行编程实现,而是直接进行的计算。
程序中考虑到MATLAB处理程序的特性,尽可能地将所有的循环都转换成了矩阵运算,大大加快了程序的运行速度。
编写时出现了很多错误,常见的如矩阵运算维数不匹配,索引值超出向量大小等;有时候用了很麻烦的运算来实现了后来才知道原来可以直接调用Matlab里面的库函数来实现以及怎么将结果更清晰更完整的展现出来等等。
通过自己编写算法来实现各个网络,一来提升了我对各个网络的理解程度,二来使我熟悉了Matlab环境下的编程。
1.函数拟合(分别使用BP,RBF,SVM),要求比较三个网络。
2π.x ,05x)sin(5x)exp(y(x)4π.x ,0xsinx y(x)100.x x),1exp(y(x)100.x ,1x1y(x)≤≤-=≤≤=≤≤-=≤≤=解:(1).1001,1)(≤≤=x x x ya. BP 网络:Matlab 代码如下:nv=10; %神经元个数:10个err=0.001; %误差阈值J=1; %误差初始值N=1; %迭代次数u=0.2; %学习率wj=rand(1,nv); %输入层到隐层神经元的权值初始化wk=rand(1,nv); %隐层神经元到输出层的权值初始化xtrain=1:4:100; %训练集,25个样本xtest=1:1:100; %测试集,100个dtrain=1./xtrain; %目标输出向量,即教师%训练过程while (J>err)&&(N<100000)uj=wj'*xtrain;h=1./(1+exp(-uj)); %训练集隐层神经元输出uk=wk*h;y=1./(1+exp(-uk)); %训练集输出层实际输出delta_wk = u*(dtrain-y).*y.*(1-y)*h'; %权值调整delta_wj = u*wk.*(((dtrain-y).*y.*(1-y).*xtrain)*(h.*(1-h))'); wk = wk+delta_wk;wj = wj+delta_wj;J=0.5*sum((dtrain-y).^2); %误差计算j(N)=J;N=N+1;end%测试及显示uj=wj'*xtest;h=1./(1+exp(-uj));uk=wk*h;dtest=1./(1+exp(-uk));figuresubplot(1,2,1),plot(xtest,dtest,'ro',xtest,1./xtest);legend('y=1/x', 'network output');subplot(1,2,2),plot(xtest,1./xtest-dtest);x=1:N-1;figureplot(x,j(x));运行条件:10个神经元,误差迭代阈值为0.001.学习率为0.2。