基于matlab实现BP神经网络模型仿真
- 格式:doc
- 大小:297.00 KB
- 文档页数:14
求用matlab编BP神经网络预测程序求一用matlab编的程序P=[。
];输入T=[。
];输出% 创建一个新的前向神经网络net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值inputWeights=net_1.IW{1,1}inputbias=net_1.b{1}% 当前网络层权值和阈值layerWeights=net_1.LW{2,1}layerbias=net_1.b{2}% 设置训练参数net_1.trainParam.show = 50;net_1.trainParam.lr = 0.05;net_1.trainParam.mc = 0.9;net_1.trainParam.epochs = 10000;net_1.trainParam.goal = 1e-3;% 调用TRAINGDM 算法训练BP 网络[net_1,tr]=train(net_1,P,T);% 对BP 网络进行仿真A = sim(net_1,P);% 计算仿真误差E = T - A;MSE=mse(E)x=[。
]';%测试sim(net_1,x) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%不可能啊我200928对初学神经网络者的小提示第二步:掌握如下算法:2.最小均方误差,这个原理是下面提到的神经网络学习算法的理论核心,入门者要先看《高等数学》(高等教育出版社,同济大学版)第8章的第十节:“最小二乘法”。
3.在第2步的基础上看Hebb学习算法、SOM和K-近邻算法,上述算法都是在最小均方误差基础上的改进算法,参考书籍是《神经网络原理》(机械工业出版社,Simon Haykin著,中英文都有)、《人工神经网络与模拟进化计算》(清华大学出版社,阎平凡,张长水著)、《模式分类》(机械工业出版社,Richard O. Duda等著,中英文都有)、《神经网络设计》(机械工业出版社,Martin T. Hargan等著,中英文都有)。
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神经网络的性能。
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分别为样本的最大值和最小值。
MATLAB神经⽹络(2)BP神经⽹络的⾮线性系统建模——⾮线性函数拟合2.1 案例背景在⼯程应⽤中经常会遇到⼀些复杂的⾮线性系统,这些系统状态⽅程复杂,难以⽤数学⽅法准确建模。
在这种情况下,可以建⽴BP神经⽹络表达这些⾮线性系统。
该⽅法把未知系统看成是⼀个⿊箱,⾸先⽤系统输⼊输出数据训练BP神经⽹络,使⽹络能够表达该未知函数,然后⽤训练好的BP神经⽹络预测系统输出。
本章拟合的⾮线性函数为y=x12+x22该函数的图形如下图所⽰。
t=-5:0.1:5;[x1,x2] =meshgrid(t);y=x1.^2+x2.^2;surfc(x1,x2,y);shading interpxlabel('x1');ylabel('x2');zlabel('y');title('⾮线性函数');2.2 模型建⽴神经⽹络结构:2-5-1从⾮线性函数中随机得到2000组输⼊输出数据,从中随机选择1900 组作为训练数据,⽤于⽹络训练,100组作为测试数据,⽤于测试⽹络的拟合性能。
2.3 MATLAB实现2.3.1 BP神经⽹络⼯具箱函数newffBP神经⽹络参数设置函数。
net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)P:输⼊数据矩阵;T:输出数据矩阵;S:隐含层节点数;TF:结点传递函数。
包括硬限幅传递函数hardlim、对称硬限幅传递函数hardlims、线性传递函数purelin、正切型传递函数tansig、对数型传递函数logsig;x=-5:0.1:5;subplot(2,6,[2,3]);y=hardlim(x);plot(x,y,'LineWidth',1.5);title('hardlim');subplot(2,6,[4,5]);y=hardlims(x);plot(x,y,'LineWidth',1.5);title('hardlims');subplot(2,6,[7,8]);y=purelin(x);plot(x,y,'LineWidth',1.5);title('purelin');subplot(2,6,[9,10]);y=tansig(x);plot(x,y,'LineWidth',1.5);title('tansig');subplot(2,6,[11,12]);y=logsig(x);plot(x,y,'LineWidth',1.5);title('logsig');BTF:训练函数。
BP-ANN分类器设计1.引言从深层意义上看,模式识别和人工智能本质都是在解决如何让用机器模拟人脑认知的过程。
一方面,从需要实现的功能出发,我们可以将目标分解为子功能,采用自定而下的的分解法实现我们需要的拟合算法。
而另一方面,无论人脑多么复杂,人类的认知过程都可以认为若干个神经元组成的神经网络在一定机制下经由复杂映射产生的结果。
从神经元的基本功能出发,采用自下而上的设计方法,从简单到复杂,也是实现拟合算法的一条高效途径。
1.1什么是人工神经网络人工神经网络(Artificial Neural Network,ANN)是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。
在工程与学术界也常直接简称为神经网络或类神经网络。
神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。
每个节点代表一种特定的输出函数,称为激励函数(activation function)。
每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。
网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。
而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
人工神经网络是由大量处理单元互联组成的非线性、自适应信息处理系统。
它是在现代神经科学研究成果的基础上提出的,试图通过模拟大脑神经网络处理、记忆信息的方式进行信息处理。
人工神经网络具有四个基本特征:(1)非线性非线性关系是自然界的普遍特性。
大脑的智慧就是一种非线性现象。
人工神经元处于激活或抑制二种不同的状态,这种行为在数学上表现为一种非线性关系。
具有阈值的神经元构成的网络具有更好的性能,可以提高容错性和存储容量。
(2)非局限性一个神经网络通常由多个神经元广泛连接而成。
一个系统的整体行为不仅取决于单个神经元的特征,而且可能主要由单元之间的相互作用、相互连接所决定。
通过单元之间的大量连接模拟大脑的非局限性。
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神经网络模型和改进的径向基函数网络进行预测,最后根据预测结果,分析模型的优劣,从而达到深刻理解BP神经网络和径向基函数网络的原理及应用。
所用到的数据即全国历年车祸次数来自中国汽车工业信息网,网址如下:/autoinfo_cn/cszh/gljt/qt/webinfo/2006/05/124650 1820021204.htm制作历年全国道路交通事故统计表如下所示:二、问题研究(一)研究方向(1)通过数据利用BP神经网络模型预测历年全国交通事故次数并与实际值进行比较。
(2)分析BP神经网络模型改变训练函数再进行仿真与之前结果进行对比。
(3)从泛化能力和稳定性等方面分析BP神经网络模型的优劣。
(4)利用径向基函数网络模型进行仿真,得到结果与采用BP神经网络模型得到的结果进行比较。
(二)相关知识(1)人工神经网络人工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。
在工程与学术界也常直接简称为神经网络或类神经网络。
神经网络是一种运算模型,由大量的节点(或称神经元)和之间相互联接构成。
每个节点代表一种特定的输出函数,称为激励函数(activation function)。
每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。
网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。
而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
人工神经网络有以下几个特征:(1)非线性非线性关系是自然界的普遍特性。
大脑的智慧就是一种非线性现象。
人工神经元处于激活或抑制二种不同的状态,这种行为在数学上表现为一种非线性网络关系。
具有阈值的神经元构成的网络具有更好的性能,可以提高容错性和存储容量。
(2)非局限性一个神经网络通常由多个神经元广泛连接而成。
一个系统的整体行为不仅取决于单个神经元的特征,而且可能主要由单元之间的相互作用、相互连接所决定。
通过单元之间的大量连接模拟大脑的非局限性。
联想记忆是非局限性的典型例子。
(3)非常定性人工神经网络具有自适应、自组织、自学习能力。
神经网络不但处理的信息可以有各种变化,而且在处理信息的同时,非线性动力系统本身也在不断变化。
经常采用迭代过程描写动力系统的演化过程。
(4)非凸性一个系统的演化方向,在一定条件下将取决于某个特定的状态函数。
例如能量函数,它的极值相应于系统比较稳定的状态。
非凸性是指这种函数有多个极值,故系统具有多个较稳定的平衡态,这将导致系统演化的多样性。
(2)BP神经网络模型BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。
BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。
它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。
(3)径向基函数网络模型径向基函数(Radial Basis Function,RBF)神经网络由三层组成,输入层节点只传递输入信号到隐层,隐层节点由像高斯函数那样的辐射状作用函数构成,而输出层节点通常是简单的线性函数。
隐层节点中的作用函数(基函数)对输入信号将在局部产生响应,也就是说,当输入信号靠近基函数的中央范围时,隐层节点将产生较大的输出,由此看出这种网络具有局部逼近能力,所以径向基函数网络也称为局部感知场网络。
三、建模第一步:根据数据选定BP神经网络的结构,本文中所用到的BP神经网络模型网络层数为2,隐层神经元数目为10,选择隐层和输出层神经元函数分别为tansig函数和purelin函数,网络训练方法分别用了梯度下降法、有动量的梯度下降法和有自适应lr的梯度下降法。
第二步:对输入数据和输出数据进行归一化处理;第三步:有函数newff()构造神经网络。
第四步:在对神经网络训练之前,首先设定相关参数,例如最大训练次数、训练要求精度、学习率等。
第五步:对BP神经网络进行训练。
第六步:重复训练直到满足要求为止。
第七步:保存训练好的神经网络,并用训练好的神经网络进行预测。
第八步:将预测值和实际输出值进行对比,分析模型的稳定性。
四、仿真x=[];y=[];p=x';t=y';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%数据归一figure(1);plot(pn,tn,'-');title('实际输入与实际输出图','fontsize',12)ylabel('实际输出','fontsize',12)xlabel('样本','fontsize',12)net=newff(minmax(pn),[10 1],{'tansig''purelin'},'traingd');net.trainParam.epochs=50000;net.trainParam.goal=0.00001;net.trainParam.lr=0.01;%net.trainParam.min_grad=1e-50;net=train(net,pn,tn);t2=sim(net,pn);figure(2);plot(pn,tn,'r',pn,t2,'b');legend('期望输出','预测输出')title('预测输出与实际输出对比','fontsize',12) ylabel('函数输出','fontsize',12)xlabel('样本','fontsize',12)figure(3)plot(pn,t2,':og');hold onplot(pn,tn,'-*');legend('预测输出','期望输出')title('BP网络预测输出','fontsize',12)ylabel('函数输出','fontsize',12)xlabel('样本','fontsize',12)error=t2-tn;figure(4)plot(error,'-*')title('BP网络预测误差','fontsize',12)ylabel('误差','fontsize',12)xlabel('样本','fontsize',12)figure(5)plot((tn-t2)./t2,'-*');title('神经网络预测误差百分比')errorsum=sum(abs(error))%输出训练后的权值和阈值iw1=net.IW{1};b1=net.b{1};lw2=net.LW{2};b2=net.b{2};仿真结果如下图所示:(1)模型训练方法为梯度下降法,函数为traingd-1-0.8-0.6-0.4-0.20.20.40.60.81实际输入与实际输出图实际输出样本-1-0.8-0.6-0.4-0.200.20.40.60.81样本函数输出预测输出与实际输出对比-1-0.8-0.6-0.4-0.200.20.40.60.81样本函数输出024681012-3BP 网络预测误差误差样本024681012神经网络预测误差百分比神经网络的第一层的权重为:13.6043215790013-13.6781856692610-14.0649206962947-13.9848650272192-13.9871960386982-13.9951268043836-14.0071081197679-13.988886625663514.110816728841513.9653714912941神经网络第一层的偏置为:-14.393549295834211.28167070143647.643172268473664.706256083856511.69507957693330-1.57106974025717-4.61930431372367-7.7988362108953210.754283704611714.0333143274359神经网络的第二层的权重为:0.519149236262203 0.251828769407092 0.1027356545542340.150414********* 0.281458748263410 0.309838232092716-0.0253911425777369 -0.289400126603914 0.4399908683284090.108195723319044神经网络第而层的偏置为:-0.427391472171392(2) 模型训练方法为有动量的梯度下降法,函数为traingdm-1-0.8-0.6-0.4-0.200.20.40.60.81样本函数输出(3) 模型训练方法为有自适应lr 的梯度下降法,函数为traingda-1-0.8-0.6-0.4-0.200.20.40.60.81样本函数输出五、评价(1)初始值的影响本文建立BP神经网络模型时用的是newff()函数,由于newff()的随意性,所以基本上每一次的训练结果都是不同的。
前馈型神经网络在训练之前必须要对权值和阈值进行初始化,newff()可以自动完成这一过程,但是,权值和阈值的初始化时随机的,这里就不详细研究了。
(2)训练函数的影响从上文所给的结果图可以看出,训练函数对模型训练的影响是显著的,网络训练方法分别用了梯度下降法、有动量的梯度下降法和有自适应lr的梯度下降法,可以看到用梯度下降法要训练24961步才能达到要求的训练精度,而使用有动量的梯度下降法和有自适应lr 的梯度下降法分别只需要11199步和830步。