BP神经网络MATLAB实例(简单而经典)_2

合集下载

MATLAB程序代码--BP神经网络的设计实例

MATLAB程序代码--BP神经网络的设计实例

MATLAB程序代码--BP神经网络的设计实例例1 采用动量梯度下降算法训练 BP 网络。

训练样本定义如下:输入矢量为p =[-1 -2 3 1-1 1 5 -3]目标矢量为t = [-1 -1 1 1]解:本例的 MATLAB 程序如下:close allclearecho onclc% NEWFF——生成一个新的前向神经网络% TRAIN——对 BP 神经网络进行训练% SIM——对 BP 神经网络进行仿真pause% 敲任意键开始clc% 定义训练样本% P 为输入矢量P=[-1, -2,3,1;-1,1,5, -3];% T 为目标矢量T=[-1, -1, 1, 1];pause;clc% 创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingd m')% 当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}% 当前网络层权值和阈值layerWeights=net.LW{2,1} layerbias=net.b{2}pauseclc% 设置训练参数net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3; pauseclc% 调用 TRAINGDM 算法训练 BP 网络[net,tr]=train(net,P,T);pauseclc% 对 BP 网络进行仿真A = sim(net,P)% 计算仿真误差E = T - AMSE=mse(E)pauseclcecho off例2 采用xx正则化算法提高 BP 网络的推广能力。

利用MATLAB实现BP神经网络的设计[2页]

利用MATLAB实现BP神经网络的设计[2页]
!"#$%"&’()"$
科技广场
利用 36786& 实现 &’ 神经网络的设计
北京交通大学计算机与信息技术学院 杨雁宁
河南财经学院层 前 馈 神 经 网 络 ,因 其 采 用 误 差 反 向传播算法( ())*) &+,- ’)*.+/+01*2,即 &’ 算法)而得 名 ,是 目 前 应 用 最 为 广 泛 的 神 经 网 络 之 一 。主 要 应 用 于 模 式 识 别 、函 数 逼 近 、数 据 压 缩 及 预 测 等 领 域 。 美 国 的 3+045*)- 公 司 推 出 的 36786& 软 件 包 既 是 一 种 非 常 实用有效的科研编程软件环境,又是一种进行科学和 工程计算的交互式程序。36786& 本身带有神经网络 工具箱,可以大大方便权值训练,减少训练程序工作 量 ,有 效 的 提 高 工 作 效 率 。
一、&’ 网络模型的拓朴结构 &’ 网络一般由三层组成,即输入层、隐含层、输出 层 。 层 与 层 之 间 采 用 全 互 连 方 式 。 9:%: 年 ,;*<=)0 >=,4—?1=@A*2 证明了一个三层的 &’ 网络可以完成任 意的 2 维到 B 维的映射。隐含层的神经元均采用 C 型 函数。输出层可以是线性神经元,也可以是对数 C 形神 经元。 假设 &’ 神经网络每层有 ! 个节点,作用函数为非 线性的 C1/B*1D 型函数,一般采用(" #)E9(F 9G$HI),学 习集包括 % 个样本模式( &’,( ’)。对第 ) 个学习样本 ( )E9,!,…,%)
二、&’ 网络的 36786& 实现 在 36786& 神经网络工具箱中,有很多 方 便 的 构 建神经网络的函数。对 &’ 网络的实现可以分为四步: 创 建 、初 始 化 、训 练 和 仿 真 。 9$创建 2=5LL。 创建一个 ? 层的 &’ 神经网络的格式如下: *$+ E 2=5LL *$+ E 2=0(LL ’;,MC9 C!…C?N,O7P9 7P!…7P?Q, &7P,&8P,’P) 参数意义:’; 输入向量的取值范围。 C1 第 R 层的神经元个数,总共 ? 层。 7L1 第 R 层的传递函数,缺省值为“ 0+2A1/”。 &7P &’ 网络训练函数,缺省为“ 0)+12@B”。 &8P 权值和阈值学习函数,缺省为“ @=+)2/DB”。 ’P 性能函数,缺省值为“ BA=”。 !$初始化 12(10 )。使用 2=5LL 创建前馈神经网络 后 ,网 络 会 自 动 地 初 始 化 权 值 和 阈 值 ,缺 省 值 都 是 "。 如果要设置这些初始值,可以使用函数 12(10 )。 格式:*$+E12(10 2=0) S$训练 0)+12。神经网络的权值和阈值初始化以后, 就 可 以 对 网 络 进 行 训 练 。在 训 练 的 过 程 中 ,网 络 的 权 值 和 阈 值 被 反 复 地 调 整 , 以 减 少 网 络 性 能 函 数 2=0$.=)H L*)BP,2 的值,直到达到预先的要求。 T$仿 真 A1B( )。仿真函数 A1B( )用来对网络 进 行 仿 真 。 利 用 此 函 数 ,可 以 在 网 络 训 练 前 后 分 别 进 行 输入输出的仿真,以作比较,从而对网络进行修改评价。 三 、设 计 实 例 建立一个两 层 的 &’ 神 经 网 络$ 输 入 的 范 围 是[ " 9"],第一层采用正切 C 形神经元,第二层 采 用 线 性 神 经元。样本输入 ’ 和目标输出 7 为: ’ E M" 9 ! S T # U V % : 9"N;

BP神经网络MATLAB编程代码

BP神经网络MATLAB编程代码

BP神经网络的设计MATLAB编程例1 采用动量梯度下降算法训练 BP 网络。

训练样本定义如下:输入矢量为p =[-1 -2 3 1-1 1 5 -3]目标矢量为 t = [-1 -1 1 1]解:本例的 MATLAB 程序如下:close allclearecho onclc% NEWFF——生成一个新的前向神经网络% TRAIN——对 BP 神经网络进行训练% SIM——对 BP 神经网络进行仿真pause% 敲任意键开始clc% 定义训练样本% P 为输入矢量P=[-1, -2, 3, 1; -1, 1, 5, -3];% T 为目标矢量T=[-1, -1, 1, 1];pause;clc% 创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}% 当前网络层权值和阈值layerWeights=net.LW{2,1}layerbias=net.b{2}pauseclc% 设置训练参数net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3;pauseclc% 调用 TRAINGDM 算法训练 BP 网络[net,tr]=train(net,P,T);pauseclc% 对 BP 网络进行仿真A = sim(net,P)% 计算仿真误差E = T - AMSE=mse(E)pauseclcecho off例2 采用贝叶斯正则化算法提高 BP 网络的推广能力。

BP神经网络预测的matlab代码

BP神经网络预测的matlab代码

BP神经网络预测的matlab代码附录5:BP神经网络预测的matlab代码: P=[ 00.13860.21970.27730.32190.35840.38920.41590.43940.46050.47960.49700.52780.55450.59910.60890.61820.62710.63560.64380.65160.65920.66640.67350.72220.72750.73270.73780.74270.74750.75220.75680.76130.76570.7700]T=[0.4455 0.323 0.4116 0.3255 0.4486 0.2999 0.4926 0.2249 0.48930.2357 0.4866 0.22490.4819 0.2217 0.4997 0.2269 0.5027 0.217 0.5155 0.1918 0.5058 0.2395 0.4541 0.2408 0.4054 0.2701 0.3942 0.3316 0.2197 0.2963 0.5576 0.1061 0.4956 0.267 0.5126 0.2238 0.5314 0.2083 0.5191 0.208 0.5133 0.18480.5089 0.242 0.4812 0.2129 0.4927 0.287 0.4832 0.2742 0.5969 0.24030.5056 0.2173 0.5364 0.1994 0.5278 0.2015 0.5164 0.2239 0.4489 0.2404 0.4869 0.2963 0.4898 0.1987 0.5075 0.2917 0.4943 0.2902 ]threshold=[0 1]net=newff(threshold,[11,2],{'tansig','logsig'},'trainlm');net.trainParam.epochs=6000net.trainParam.goal=0.01LP.lr=0.1;net=train(net,P',T')P_test=[ 0.77420.77840.78240.78640.79020.7941 ] out=sim(net,P_test')友情提示:以上面0.7742为例0.7742=ln(47+1)/5因为网络输入有一个元素,对应的是测试时间,所以P只有一列,Pi=log(t+1)/10,这样做的目的是使得这些数据的范围处在[0 1]区间之内,但是事实上对于logsin命令而言输入参数是正负区间的任意值,而将输出值限定于0到1之间。

matlab bp预测例子

matlab bp预测例子

matlab bp预测例子一、引言人工神经网络(Artificial Neural Network,ANN)是一种模拟人脑神经元网络的数学模型,具有自我学习和适应能力。

而BP神经网络(Back Propagation Neural Network)是其中的一种常见类型,它通过反向传播算法来调整网络的权重和阈值,从而实现对样本数据的拟合和预测。

本文将以MATLAB为例,介绍如何使用BP神经网络进行预测。

二、数据准备我们需要准备用于训练和测试的数据。

假设我们要预测某城市的房价,我们可以收集到以下数据:房屋面积、房间数量、楼层高度、建筑年份和房价。

我们将这些数据存储在一个Excel文件中,然后使用MATLAB的数据导入工具将其读入到工作空间中。

三、数据预处理在进行BP神经网络训练之前,我们需要对数据进行预处理。

首先,我们要将数据划分为训练集和测试集,一般可以按照70%的比例划分。

然后,我们需要对数据进行归一化处理,将所有特征值缩放到0-1之间,以避免某个特征对网络的影响过大。

MATLAB提供了相关函数可以进行数据归一化处理。

四、网络建模在进行网络建模之前,我们需要确定网络的结构和参数。

一般来说,输入层的节点数应该等于特征的个数,输出层的节点数应该等于预测的目标个数。

隐藏层的节点数可以根据经验选择,一般不宜过多,以免过拟合。

然后,我们需要选择合适的激活函数和学习率。

在MATLAB中,可以使用“patternnet”函数来创建BP神经网络对象,并设置相应的参数。

五、网络训练在进行网络训练之前,我们需要将数据转换为MATLAB所需的格式。

然后,可以使用“train”函数对网络进行训练。

训练过程中,MATLAB会根据样本数据和预测结果计算误差,并根据误差进行反向传播调整权重和阈值。

训练的次数可以根据需要进行调整,一般情况下,训练次数越多,网络的拟合能力越强,但也容易造成过拟合。

六、网络预测在网络训练完成后,我们可以使用训练好的网络对新的样本进行预测。

PSO优化的BP神经网络(Matlab版)

PSO优化的BP神经网络(Matlab版)

PSO优化的BP神经⽹络(Matlab版)前⾔:最近接触到⼀些神经⽹络的东西,看到很多⼈使⽤PSO(粒⼦群优化算法)优化BP神经⽹络中的权值和偏置,经过⼀段时间的研究,写了⼀些代码,能够跑通,嫌弃速度慢的可以改⼀下训练次数或者适应度函数。

在我的理解⾥,PSO优化BP的初始权值w和偏置b,有点像数据迁徙,等于⽤粒⼦去尝试作为⽹络的参数,然后训练⽹络的阈值,所以总是会看到PSO优化了权值和阈值的说法,(⼀开始我是没有想通为什么能够优化阈值的),下⾯是我的代码实现过程,关于BP和PSO的原理就不⼀⼀赘述了,⽹上有很多⼤佬解释的很详细了……⾸先是利⽤BP作为适应度函数function [error] = BP_fit(gbest,input_num,hidden_num,output_num,net,inputn,outputn)%BP_fit 此函数为PSO的适应度函数% gbest:最优粒⼦% input_num:输⼊节点数⽬;% output_num:输出层节点数⽬;% hidden_num:隐含层节点数⽬;% net:⽹络;% inputn:⽹络训练输⼊数据;% outputn:⽹络训练输出数据;% error : ⽹络输出误差,即PSO适应度函数值w1 = gbest(1:input_num * hidden_num);B1 = gbest(input_num * hidden_num + 1:input_num * hidden_num + hidden_num);w2 = gbest(input_num * hidden_num + hidden_num + 1:input_num * hidden_num...+ hidden_num + hidden_num * output_num);B2 = gbest(input_num * hidden_num+ hidden_num + hidden_num * output_num + 1:...input_num * hidden_num + hidden_num + hidden_num * output_num + output_num);net.iw{1,1} = reshape(w1,hidden_num,input_num);net.lw{2,1} = reshape(w2,output_num,hidden_num);net.b{1} = reshape(B1,hidden_num,1);net.b{2} = B2';%建⽴BP⽹络net.trainParam.epochs = 200;net.trainParam.lr = 0.05;net.trainParam.goal = 0.000001;net.trainParam.show = 100;net.trainParam.showWindow = 0;net = train(net,inputn,outputn);ty = sim(net,inputn);error = sum(sum(abs((ty - outputn))));end 然后是PSO部分:%%基于多域PSO_RBF的6R机械臂逆运动学求解的研究clear;close;clc;%定义BP参数:% input_num:输⼊层节点数;% output_num:输出层节点数;% hidden_num:隐含层节点数;% inputn:⽹络输⼊;% outputn:⽹络输出;%定义PSO参数:% max_iters:算法最⼤迭代次数% w:粒⼦更新权值% c1,c2:为粒⼦群更新学习率% m:粒⼦长度,为BP中初始W、b的长度总和% n:粒⼦群规模% gbest:到达最优位置的粒⼦format longinput_num = 3;output_num = 3;hidden_num = 25;max_iters =10;m = 500; %种群规模n = input_num * hidden_num + hidden_num + hidden_num * output_num + output_num; %个体长度w = 0.1;c1 = 2;c2 = 2;%加载⽹络输⼊(空间任意点)和输出(对应关节⾓的值)load('pfile_i2.mat')load('pfile_o2.mat')% inputs_1 = angle_2';inputs_1 = inputs_2';outputs_1 = outputs_2';train_x = inputs_1(:,1:490);% train_y = outputs_1(4:5,1:490);train_y = outputs_1(1:3,1:490);test_x = inputs_1(:,491:500);test_y = outputs_1(1:3,491:500);% test_y = outputs_1(4:5,491:500);[inputn,inputps] = mapminmax(train_x);[outputn,outputps] = mapminmax(train_y);net = newff(inputn,outputn,25);%设置粒⼦的最⼩位置与最⼤位置% w1阈值设定for i = 1:input_num * hidden_numMinX(i) = -0.01*ones(1);MaxX(i) = 3.8*ones(1);end% B1阈值设定for i = input_num * hidden_num + 1:input_num * hidden_num + hidden_numMinX(i) = 1*ones(1);MaxX(i) = 8*ones(1);end% w2阈值设定for i = input_num * hidden_num + hidden_num + 1:input_num * hidden_num + hidden_num + hidden_num * output_numMinX(i) = -0.01*ones(1);MaxX(i) = 3.8*ones(1);end% B2阈值设定for i = input_num * hidden_num+ hidden_num + hidden_num * output_num + 1:input_num * hidden_num + hidden_num + hidden_num * output_num + output_num MinX(i) = 1*ones(1);MaxX(i) = 8*ones(1);end%%初始化位置参数%产⽣初始粒⼦位置pop = rands(m,n);%初始化速度和适应度函数值V = 0.15 * rands(m,n);BsJ = 0;%对初始粒⼦进⾏限制处理,将粒⼦筛选到⾃定义范围内for i = 1:mfor j = 1:input_num * hidden_numif pop(i,j) < MinX(j)pop(i,j) = MinX(j);endif pop(i,j) > MaxX(j)pop(i,j) = MaxX(j);endendfor j = input_num * hidden_num + 1:input_num * hidden_num + hidden_numif pop(i,j) < MinX(j)pop(i,j) = MinX(j);endif pop(i,j) > MaxX(j)pop(i,j) = MaxX(j);endendfor j = input_num * hidden_num + hidden_num + 1:input_num * hidden_num + hidden_num + hidden_num * output_numif pop(i,j) < MinX(j)pop(i,j) = MinX(j);endif pop(i,j) > MaxX(j)pop(i,j) = MaxX(j);endendfor j = input_num * hidden_num+ hidden_num + hidden_num * output_num + 1:input_num * hidden_num + hidden_num + hidden_num * output_num + output_num if pop(i,j) < MinX(j)pop(i,j) = MinX(j);endif pop(i,j) > MaxX(j)pop(i,j) = MaxX(j);endendend%评估初始粒⼦for s = 1:mindivi = pop(s,:);fitness = BP_fit(indivi,input_num,hidden_num,output_num,net,inputn,outputn);BsJ = fitness; %调⽤适应度函数,更新每个粒⼦当前位置Error(s,:) = BsJ; %储存每个粒⼦的位置,即BP的最终误差end[OderEr,IndexEr] = sort(Error);%将Error数组按升序排列Errorleast = OderEr(1); %记录全局最⼩值for i = 1:m %记录到达当前全局最优位置的粒⼦if Error(i) == Errorleastgbest = pop(i,:);break;endendibest = pop; %当前粒⼦群中最优的个体,因为是初始粒⼦,所以最优个体还是个体本⾝for kg = 1:max_iters %迭代次数for s = 1:m%个体有52%的可能性变异for j = 1:n %粒⼦长度for i = 1:m %种群规模,变异是针对某个粒⼦的某⼀个值的变异if rand(1)<0.04pop(i,j) = rands(1);endendend%r1,r2为粒⼦群算法参数r1 = rand(1);r2 = rand(1);%个体位置和速度更新V(s,:) = w * V(s,:) + c1 * r1 * (ibest(s,:)-pop(s,:)) + c2 * r2 * (gbest(1,:)-pop(s,:));pop(s,:) = pop(s,:) + 0.3 * V(s,:);%对更新的位置进⾏判断,超过设定的范围就处理下。

GA-BP神经网络应用实例之MATLAB程序

GA-BP神经网络应用实例之MATLAB程序

GA-BP神经网络应用实例之MATLAB程序% gap.xls中存储训练样本的原始输入数据 37组% gat.xls中存储训练样本的原始输出数据 37组% p_test.xls中存储测试样本的原始输入数据 12组% t_test.xls中存储测试样本的原始输出数据 12组% 其中gabpEval.m适应度值计算函数,gadecod.m解码函数%--------------------------------------------------------------------------nntwarn off;% nntwarn函数可以临时关闭神经网络工具箱的警告功能,当代码使用到神经% 网络工具箱的函数时会产生大量的警告而这个函数可以跳过这些警告但% 是,为了保证代码可以在新版本的工具箱下运行,我们不鼓励这么做pc=xlsread('gap.xls');tc=xlsread('gat.xls');p_test=xlsread('p_test.xls');t_test=xlsread('t_test.xls');p=pc';t=tc';p_test=p_test';t_test=t_test';% 归一化处理for i=1:2P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:))); endfor i=1:4T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:))); endfor i=1:2P_test(i,:)=(p_test(i,:)-min(p_test(i,:)))/(max(p_test(i,:))-min(p_test(i,:)));end%--------------------------------------------------------------------------% 创建BP神经网络,隐含层节点数为12net=newff(minmax(P),[12,4],{'tansig','purelin'},'trainlm'); %-------------------------------------------------------------------------- % 下面使用遗传算法对网络进行优化R=size(P,1);% BP神经网络输入层节点数S2=size(T,1);% BP神经网络输出层节点数S1=12;% 隐含层节点数S=R*S1+S1*S2+S1+S2;% 遗传算法编码长度aa=ones(S,1)*[-1,1];popu=100;% 种群规模initPop=initializega(popu,aa,'gabpEval');% 初始化种群gen=500;% 遗传代数% 下面调用gaot工具箱,其中目标函数定义为gabpEval[x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPop,[1e-6 11],'maxGenTerm',...gen,'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);%--------------------------------------------------------------------------% 绘收敛曲线图figure;plot(trace(:,1),1./trace(:,3),'r-'); hold on;plot(trace(:,1),1./trace(:,2),'b-'); xlabel('遗传代数');ylabel('平方和误差');figure;plot(trace(:,1),trace(:,3),'r-'); hold on;plot(trace(:,1),trace(:,2),'b-'); xlabel('遗传代数');ylabel('适应度');legend('平均适应度值','最优适应度值'); %-------------------------------------------------------------------------- % 下面将初步得到的权值矩阵赋给尚未开始训练的BP网络[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x); net.IW{1,1}=W1;net.LW{2,1}=W2;net.b{1}=B1;net.b{2}=B2;% 设置训练参数net.trainParam.epochs=3000;net.trainParam.goal=1e-6;% 训练网络net=train(net,P,T);w1=net.IW{1,1};w2=net.LW{2,1};b1=net.b{1};b2=net.b{2};% 测试网络性能temp=sim(net,P_test);yuce1=[temp(1,:);temp(2,:),;temp(3,:);temp(4,:)];for i=1:4yuce(i,:)=yuce1(i,:)*(max(t_test(i,:))-min(t_test(i,:)))+min(t_test(i,:));end%--------------------------------------------------------------------------% 测试输出结果之一figure;plot(1:12,yuce(1,:),'bo-');ylabel('切口外径 mm');hold on;plot(1:12,t_test(1,:),'r*-'); legend('测试结果','测试样本');figure;plot(1:12,yuce(1,:)-t_test(1,:),'b-');ylabel('误差 mm');title('测试结果与测试样本误差');figure;plot(1:12,((yuce(1,:)-t_test(1,:))/t_test(1,:))*100,'b*'); ylabel('百分比');title('测试结果与测试样本误差');% 测试输出结果之二figure;plot(1:12,yuce(2,:),'bo-'); ylabel('切口内径 mm');hold on;plot(1:12,t_test(2,:),'r*-'); legend('测试结果','测试样本'); figure;plot(1:12,yuce(2,:)-t_test(2,:),'b-');ylabel('误差 mm');title('测试结果与测试样本误差');figure;plot(1:12,((yuce(2,:)-t_test(2,:))/t_test(2,:))*100,'b*'); ylabel('百分比');title('测试结果与测试样本误差');% 测试输出结果之三figure;plot(1:12,yuce(3,:),'bo-'); ylabel('最大滚切力 N');hold on;plot(1:12,t_test(3,:),'r*-'); legend('测试结果','测试样本'); figure;plot(1:12,yuce(3,:)-t_test(3,:),'b-');ylabel('误差 N');title('测试结果与测试样本误差');figure;plot(1:12,((yuce(3,:)-t_test(3,:))/t_test(3,:))*100,'b*');ylabel('百分比');title('测试结果与测试样本误差');% 测试输出结果之四figure;plot(1:12,yuce(4,:),'bo-'); ylabel('切断时间 s');hold on;plot(1:12,t_test(4,:),'r*-');legend('测试结果','测试样本');figure;plot(1:12,yuce(4,:)-t_test(4,:),'b-');ylabel('误差 s');title('测试结果与测试样本误差');figure;plot(1:12,((yuce(4,:)-t_test(4,:))/t_test(4,:))*100,'b*'); ylabel('百分比');title('测试结果与测试样本误差');%--------------------------------------------------------------------------。

BP神经网络matlab

BP神经网络matlab

编程思想:BP神经网络是一个前向网络,它利用误差反向传播算法对网络进行训练,结构简单,可塑性强。

本例选择3层BP神经网络(隐层为1层)来逼近函数,单输入单输出,隐层包含7个神经元,预设精度为0.1,学习率设为0.1,循环次数为5000次,达到循环次数,或结果达到预设精度要求,结束计算。

激活函数选择双曲函数,采用梯度下降法,通过神经元的输入和误差,以及权值的学习速率来计算权值的变化率。

将输入提供给网络后,神经元的激活值从输入层经各中间层向输出层传播,输出层的神经元获得网络的输入相应。

接下来,按照减少目标输出与实际输出之间误差的方向,从输出层反向经过中间层回到输入层,从而逐层修正各连接权值。

随着误差逆向的传播修正不断进行,网络对输入响应的正确率也不断上升。

程序结果:050010001500200025003000350040004500-0.500.51图一为误差曲线,图二为验证结果由图可见:当输入样本samplelist=-0.5:0.05:0.45时,网络经过5000次的循环计算,误差几乎为0.验证数据的输入样本为:-0.48:0.05:1。

可以发现在输入小于0时,期望的输出值和通过神经网络得到的输出值偏差较大,但当输入大于0时,偏差逐渐减小,输入大于0.5时,偏差基本为0。

分析原因,可能是因为隐层数目较少,隐层神经元数目选择不当造成。

Matlab程序如下(附详细注释):clear all%********预设各个参数大小和存储空间********inputnums=1;%输入层节点为1outputnums=1;%输出层节点为1hidenums=7;%隐层节点为7maxcount=5000;%最大迭代次数samplenum=19;%一个计数器,无意义precision=0.1;%预设精度alpha=0.01;%学习率设定值error=zeros(1,maxcount+1);%error数组初始化,目的是预分配内存空间errorp=zeros(1,samplenum);%同上v=rand(inputnums,hidenums);%1*7;v初始化为一个1*7的随机归一矩阵;v表输入层到隐层的权值deltv=zeros(inputnums,hidenums);%1*7;内存空间预分配dv=zeros(inputnums,hidenums);%1*7;w=rand(hidenums,outputnums);%7*1;隐层到输出层的权值deltw=zeros(hidenums,outputnums);%7*1dw=zeros(hidenums,outputnums);%7*1samplelist=-0.5:0.05:0.45;%输入数据expectlist=exp(-1.9.*(samplelist+0.5)).*sin(10.*samplelist); %期望输出[samplelist,minp,maxp]=premnmx(samplelist);%输入数据预处理%************BP神经网络循环调整权值*************count=1;while(count<=maxcount)%结束条件1迭代5000次c=1;while(c<=samplenum)for k=1:outputnumsd(k)=expectlist(c);%获得期望输出的向量endfor i=1:inputnumsx(i)=samplelist(c);%获得输入的向量数据end%******前向计算**********;for j=1:hidenumsnet=0.0;for i=1:inputnumsnet=net+x(i)*v(i,j);%输入层到隐层的加权和∑X(i)V(i)endy(j)=1/(1+exp(-net));%输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数 endfor k=1:outputnumsnet=0.0;for j=1:hidenumsnet=net+y(j)*w(j,k);endo(k)=1/(1+exp(-net));%计算获得的输出值end%********反向计算,修改权值*******errortmp=0.0;for k=1:outputnumserrortmp=errortmp+(d(k)-o(k))^2;%第一组训练后的误差计算errorp(c)=0.5*errortmp;%误差E=∑(d(k)-o(k))^2 * 1/2%end%****backward()********;for k=1:outputnumsyitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%输出层误差偏导endfor j=1:hidenumstem=0.0;for k=1:outputnumstem=tem+yitao(k)*w(j,k);%为了求隐层偏导,而计算的求和endyitay(j)=tem*y(j)*(1-y(j));%隐层偏导end%******调整各层权值********for j=1:hidenumsfor k=1:outputnumsdeltw(j,k)=alpha*yitao(k)*y(j);%权值w的调整量deltw(已乘学习率) w(j,k)=w(j,k)+deltw(j,k);%权值调整endendfor i=1:inputnumsfor j=1:hidenumsdeltv(i,j)=alpha*yitay(j)*x(i);%同上deltwv(i,j)=v(i,j)+deltv(i,j);endendc=c+1;end %第二个while结束;表示一次BP训练结束double tmp;for i=1:samplenumtmp=tmp+errorp(i)*errorp(i);%误差求和endtmp=tmp/c;error(count)=sqrt(tmp);%误差求均方根,即精度if(error(count)<precision)%误差是否达到精度要求break;endcount=count+1;%训练次数加1end%第一个while结束%*****用其他的数据验证********error(maxcount+1)=error(maxcount);z=1:count-1;p=-0.48:0.05:1;%验证输入数据t=exp(-1.9.*(p+0.5)).*sin(10.*p)[pn,minpn,maxpn]=premnmx(p);simt=zeros(1,30);%while(a<=19)for i=1:30x=p(i);%获得输入的向量数据for j=1:hidenumsnet=0.0;net=net+x*v(1,j);%输入层到隐层的加权和y(j)=1/(1+exp(-net)); %输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数 endnet=0.0;for k=1:hidenumsnet=net+y(k)*w(k,1);endo=1/(1+exp(-net));simt(i)=o;endsubplot(2,1,1);plot(z,error(z),'-');subplot(2,1,2);plot(p,t,'*',p,simt,'-'); grid on。

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

显示训练迭代过程(NaN 表 示不显示,缺省为 25)
net.trainParam.time
最大训练时间(缺省为 inf) traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm 动量因子(缺省 0.9) 学 习 率 lr 增 长 比 ( 缺 省 为 1.05) 表现函数增加最大比(缺省 为 1.04) 权值变化增加量(缺省为 traingdm、traingdx traingda、traingdx
的增长率(缺省为 10) trainlm 的最大值(缺省为 1e10) trainlm
2、BP 网络举例 举例 1、 %traingd clear; clc; P=[-1 -1 2 2 4;0 5 0 5 7]; T=[-1 -1 1 1 -1];
%利用 minmax 函数求输入样本范围 net = newff(minmax(P),[5,1],{'tansig','purelin'},'trainrp');
学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。
p=p1';t=t1'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
%原始数据归一化
net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx'); %设置网络,建立相应的 BP 网络,minmax(pn)找到 pn 矩阵的最大最小值 net.trainParam.show=2000; % 训练网络 net.trainParam.lr=0.01; net.trainParam.epochs=100000; net.trainParam.goal=1e-5; [net,tr]=train(net ,pn,tn); 网络 pnew=pnew1'; pnewn=tramnmx(pnew,minp,maxp); anewn=sim(net,pnewn); anew=postmnmx(anewn,mint,maxt); y=anew';
(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'
plot(X,D,'*'); %绘制原始数据分布图(附录:1-1) net = newff([-1 1],[5 1],{'tansig','tansig'}); net.trainParam.epochs = 1000; %训练的最大次数 net.trainParam.goal = 0.005; %全局最小误差 net = train(net,X,D); O = sim(net,X); figure;
学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。
1.2)
net.trainParam.delt_dec net.trainParam.delt0
权值变化减小量(缺省为 0.5) 权值变化最大值(缺省为 50.0) 一维线性搜索方法(缺省为 srchcha) 因为二次求导对权值调整的 影响参数(缺省值 5.0e-5) Hessian 矩 阵 不 确 定 性 调 节 参数(缺省为 5.0e-7)
BP 网络的训练函数 训练方法 梯度下降法
训练函数 traingd traingdm traingda traingdx trainrp traincgf
有动量的梯度下降法 自适应 lr 梯度下降法 自适应 lr 动量梯度下降法 弹性梯度下降法 Fletcher-Reeves 共轭梯度法
学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。
T
举例 3、利用三层 BP 神经网络来完成非线性函数的逼近任务, 其中隐层神经元个数为五个。 样本数据:
'tansig','purelin'神经网络第一层和第二层的转移函数;'trainrp'网络训练函数。 net.trainParam.show=50; net.trainParam.lr=0.05; %最多显示训练步数 %设置训练次数, %学习率(缺省为 0.01)
%minmax(P) 取 P 的 最 大 最 小 值 ; [5,1] 第 一 次 神 经 元 5 个 , 第 二 层 1 个 ;
net.trainParam.mc
net.trainParam.lr_inc net.trainParam.lr_dec
学习率 lr 下降比 (缺省为 0.7) traingda、traingdx traingda、traingdx trainrp
net.trainParam.max_perf_inc net.trainParam.delt_inc
输出 D -0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609
输入 X -0.3000 -0.2000 -0.1000 0 0.1000 0.2000 0.3000
输出 D 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -0.0988
输入 X 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
输出 D 0.3072 0.3960 0.3449 0.1816 -0.3120 -0.2189 -0.3201
plot(X,D,'*',X,O); %绘制训练后得到的结果和误差曲线(附录:1-2、1-3) V = net.iw{1,1};%输入层到中间层权值 W = net.lw{2,1};%中间层到输出层权值 theta1 = net.b{1};%中间层各神经元阈值 theta2 = net.b{2};%输出层各神经元阈值
学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。
举例 2、利用三层 BP 神经网络来完成非线性函数的逼近任务, 其中隐层神经元个数为五个。 样本数据: 输入 X -1.0000 -0.9000 -0.8000 -0.7000 -0.6000 -0.5000 -0.4000 解: 看到期望输出的范围是 1,1 ,所以利用双极性 Sigmoid 函数作为转移函数。 程序如下: clear; clc; X=-1:0.1:1; D=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609... 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988... 0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201]; figure;
所得结果如下:
输入层到中间层的权值: V -9.1669 7.3448 7.3761 4.8966 3.5 409
T
中间层各神经元的阈值: 6.5885 -2.4019 -0.9962 1.5303 3. 2731 中间层到输出层的权值: W 0.3427 0.2135 0.2981 -0.8840 1.91 34 输出层各神经元的阈值: T -1.5271
net.trainParam.mu
net.trainParam.mu_dec net.trainParam.mu_inc net.trainParam.mu_max
控制 计算 机内存 / 速度 的参 trainlm 量, 内存较大设为 1, 否则设 为 2(缺省为 1) 的初始值(缺省为 0.001) trainlm 的减小率(缺省为 0.1) trainlm
参数介绍 最大训练次数(缺省为 10)
训练函数 traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm
相关文档
最新文档