MATLAB神经网络编程(七)——BP神经网络的实现
来源:互联网 发布:mac定制水漾轻盈粉底 编辑:程序博客网 时间:2024/05/29 01:54
《MATLAB神经网络编程》 化学工业出版社 读书笔记
第四章 前向型神经网络 4.3 BP传播网络
本文是《MATLAB神经网络编程》书籍的阅读笔记,其中涉及的源码、公式、原理都来自此书,若有不理解之处请参阅原书
本文讲述BP网络常用的两个例子:函数逼近与噪声消除
【例4-34】利用一个单隐层的BP网络来逼近一个函数。
通过对函数进行采样得到了网络的输入变量P和目标变量T,在M文件中输入以下命令:
P=-1:0.1:1;T=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4600 0.1336 -0.2013 -0.4344 -0.5000... -0.3930 -0.1647 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];
每组向量都有21组数据,可以将输入向量和目标向量绘制在一起,如下图:
该网络的输入层与输出层的神经元个数均为1,根据以上的隐含层设计经验公式(时间久了,不记得这个公式在哪里了),以及考虑本例的实际情况,解决该问题的网络的隐层神经元个数应该在3~8之间。因此,下面设计一个隐含层神经元数目可变的BP网络,通过误差比,确定最佳的隐含层神经元个数,并检验隐含层神经元个数对网络性能的影响。
在M文件中输入命令:
P=-1:0.1:1;T=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4600 0.1336 -0.2013 -0.4344 -0.5000... -0.3930 -0.1647 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];s=3:8;res=1:6for i=1:6 net=newff(minmax(P),[s(i),1],{'tansig','logsig'},'traingdx'); net.trainParam.epochs=2000; net.trainParam.goal=0.001; net=train(net,P,T) y=sim(net,P); error=y-T; res(i)=norm(error)end;
程序输出:
net = Neural Network object: architecture: numInputs: 1 numLayers: 2 biasConnect: [1; 1] inputConnect: [1; 0] layerConnect: [0 0; 1 0] outputConnect: [0 1] numOutputs: 1 (read-only) numInputDelays: 0 (read-only) numLayerDelays: 0 (read-only) subobject structures: inputs: {1x1 cell} of inputs layers: {2x1 cell} of layers outputs: {1x2 cell} containing 1 output biases: {2x1 cell} containing 2 biases inputWeights: {2x1 cell} containing 1 input weight layerWeights: {2x2 cell} containing 1 layer weight functions: adaptFcn: 'trains' divideFcn: (none) gradientFcn: 'calcgrad' initFcn: 'initlay' performFcn: 'mse' plotFcns: {'plotperform','plottrainstate','plotregression'} trainFcn: 'traingdx' parameters: adaptParam: .passes divideParam: (none) gradientParam: (none) initParam: (none) performParam: (none) trainParam: .show, .showWindow, .showCommandLine, .epochs, .time, .goal, .max_fail, .lr, .lr_inc, .lr_dec, .max_perf_inc, .mc, .min_grad weight and bias values: IW: {2x1 cell} containing 1 input weight matrix LW: {2x2 cell} containing 1 layer weight matrix b: {2x1 cell} containing 2 bias vectors other: name: '' userdata: (user information)res = 1.5775 1.8000 1.9073 1.5776 1.4413 1.4408
由此可见,网络的隐含层神经元的传递函数为tansig,输出层神经元的传递函数是logsig,因为目标向量的元素都位于区间[-1,1]中,正好满足函数tansig的输出要求。
以上结果表明,在经过2000次训练后(训练函数traingdx),隐含层神经元为8的BP网络对函数的逼近效果最好,因为他的误差最小,而且网络经过27次训练就达到了目标误差。隐含层为6和9的网络误差也比较小,但是他们需要的训练时间比较长。考虑到网络性能的训练速度,这里把网络隐含层的神经元数目设定为8。
当隐含层神经元数目是8时,网络的逼近误差是1.4407.网络的训练过程记录如下:
通过对训练好的网络进行仿真,可以得到网络对函数的逼近情况,输入下面命令:
y=sim(net,P);plot(P,T,'rp');hold onplot(P,y,'.');legend('原始网络','训练后的网络'); plot(1:21,y-T);
得到函数的逼近结果与误差曲线:
【例4-35】利用BP神经网络去除噪声问题。
在MATLAB神经网络工具箱中,提供了26个大写字母的数据矩阵,利用BP神经网络,可以进行字符识别处理。
源码:
%训练样本数据点[AR,TS]=prprob;A=size(AR,1);B=size(AR,2);C2=size(TS,1);%测试样本数据点CM=AR( : ,13)noisyCharM=AR(:,13)+rand(A,1)*0.3figureplotchar(noisyCharM)%创建BP网络,并使用数据点训练网络P=AR;T=TS;%输入层包含10个神经元,输出层为C2(26)个神经元,输入输出层分别使用logsig传递函数net=newff(minmax(P),[10,C2],{'logsig','logsig'},'traingdx');net.trainParam.show=50;net.trainParam.lr=0.1;net.trainParam.lr_inc=1.05;net.trainParam.epochs=3000;net.trainParam.goal=0.01;[net,tr]=train(net,P,T);%回带检验A=sim(net,CM)%测试样本检验a=sim(net,noisyCharM)%找到字母所在的位置pos=find(compet(a)==1)figure%绘制去除噪声后的字母plotchar(AR(:,pos))
训练过程:
实验的结果:
可见BP网络去除了字母M上的随机噪声。
- MATLAB神经网络编程(七)——BP神经网络的实现
- MATLAB神经网络编程(五)——BP神经网络的模型结构与学习规则
- MATLAB神经网络编程(六)——BP神经网络的训练函数
- MATLAB神经网络编程(八)——BP神经网络的限制与改进
- BP神经网络的matlab实现
- BP神经网络的MATLAB实现
- BP神经网络的matlab实现
- Matlab实现BP神经网络
- matlab实现BP神经网络
- BP神经网络matlab实现
- MATLAB实现BP神经网络
- Matlab实现BP神经网络
- BP神经网络的设计实例(MATLAB编程)
- BP神经网络的设计实例(MATLAB编程) .
- 基于Matlab的BP神经网络编程过程
- BP神经网络的设计实例(MATLAB编程) .
- BP神经网络设计的matlab简单实现
- BP 神经网络的 MATLAB 实现步骤
- TEA算法多语言实现——Java
- 二进制转为十六进制 十六进制转为二进制
- python学习笔记(五)
- 自定义iOS7导航栏背景,标题和返回按钮文字颜色
- SQL Server2012编程入门经典(第四版)(上) 读书笔记
- MATLAB神经网络编程(七)——BP神经网络的实现
- 什么情况下需要加extern "C",通俗易懂
- MS SQLSERVER通用存储过程分页
- Java Applet的限制
- Pthread_Mutex_t Vs Pthread_Spinlock_t
- ubuntu下安装firefox的flash插件问题
- 追逐自己的梦想----------辅助制作第三十六课:物品购买分析
- android:ellipsize的使用
- C++设计模式之代理模式