文档库 最新最全的文档下载
当前位置:文档库 › GA训练BP权值的主函数

GA训练BP权值的主函数

GA训练BP权值的主函数
GA训练BP权值的主函数

程序一:GA训练BP权值的主函数

function net=GABPNET(XX,YY)

%--------------------------------------------------------------------------

% GABPNET.m

% 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络

%--------------------------------------------------------------------------

%数据归一化预处理

nntwarn off

XX=premnmx(XX);

YY=premnmx(YY);

%创建网络

net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'trainlm');

%下面使用遗传算法对网络进行优化

P=XX;

T=YY;

R=size(P,1);

S2=size(T,1);

S1=25;%隐含层节点数

S=R*S1+S1*S2+S1+S2;%遗传算法编码长度

aa=ones(S,1)*[-1,1];

popu=50;%种群规模

initPpp=initializega(popu,aa,'gabpEval');%初始化种群

gen=100;%遗传代数

%下面调用gaot工具箱,其中目标函数定义为gabpEval

[x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,... 'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);

%绘收敛曲线图

figure(1)

plot(trace(:,1),1./trace(:,3),'r-');

hold on

plot(trace(:,1),1./trace(:,2),'b-');

xlabel('Generation');

ylabel('Sum-Squared Error');

figure(2)

plot(trace(:,1),trace(:,3),'r-');

hold on

plot(trace(:,1),trace(:,2),'b-');

xlabel('Generation');

ylabel('Fittness');

%下面将初步得到的权值矩阵赋给尚未开始训练的BP网络

[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x);

net.LW{2,1}=W1;

net.LW{3,2}=W2;

net.b{2,1}=B1;

net.b{3,1}=B2;

XX=P;

YY=T;

%设置训练参数

net.trainParam.show=1;

net.trainParam.lr=1;

net.trainParam.epochs=50;

net.trainParam.goal=0.001;

%训练网络

net=train(net,XX,YY);

程序二:适应值函数

function [sol, val] = gabpEval(sol,options)

% val - the fittness of this individual

% sol - the individual, returned to allow for Lamarckian evolution % options - [current_generation]

load data2

nntwarn off

XX=premnmx(XX);

YY=premnmx(YY);

P=XX;

T=YY;

R=size(P,1);

S2=size(T,1);

S1=25;%隐含层节点数

S=R*S1+S1*S2+S1+S2;%遗传算法编码长度

for i=1:S,

x(i)=sol(i);

end;

[W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x);

程序三:编解码函数

function [W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x) load data2

nntwarn off

XX=premnmx(XX);

YY=premnmx(YY);

P=XX;

T=YY;

R=size(P,1);

S2=size(T,1);

S1=25;%隐含层节点数

S=R*S1+S1*S2+S1+S2;%遗传算法编码长度

% 前R*S1个编码为W1

for i=1:S1,

for k=1:R,

W1(i,k)=x(R*(i-1)+k);

end

end

% 接着的S1*S2个编码(即第R*S1个后的编码)为W2

for i=1:S2,

for k=1:S1,

W2(i,k)=x(S1*(i-1)+k+R*S1);

end

end

% 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1

for i=1:S1,

B1(i,1)=x((R*S1+S1*S2)+i);

end

% 接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2

for i=1:S2,

B2(i,1)=x((R*S1+S1*S2+S1)+i);

end

% 计算S1与S2层的输出

A1=tansig(W1*P,B1);

A2=purelin(W2*A1,B2);

% 计算误差平方和

SE=sumsqr(T-A2);

val=1/SE; % 遗传算法的适应值

initializega creates a matrix of random numbers with

a number of rows equal to the populationSize and a number

columns equal to the number of rows in bounds plus 1 for the f(x) value which is found by applying the evalFN.

This is used by the ga to create the population if it

is not supplied.

BP神经网络模型 第1节基本原理简介 近年来全球性的神经网络研究热潮的再度兴起,不仅仅是因为神经科学本身取得了巨大的进展.更主要的原因在于发展新型计算机和人工智能新途径的迫切需要.迄今为止在需要人工智能解决的许多问题中,人脑远比计算机聪明的多,要开创具有智能的新一代计算机,就必须了解人脑,研究人脑神经网络系统信息处理的机制.另一方面,基于神经科学研究成果基础上发展出来的人工神经网络模型,反映了人脑功能的若干基本特性,开拓了神经网络用于计算机的新途径.它对传统的计算机结构和人工智能是一个有力的挑战,引起了各方面专家的极大关注. 目前,已发展了几十种神经网络,例如Hopficld模型,Feldmann等的连接型网络模型,Hinton等的玻尔茨曼机模型,以及Rumelhart等的多层感知机模型和Kohonen的自组织网络模型等等。在这众多神经网络模型中,应用最广泛的是多层感知机神经网络。多层感知机神经网络的研究始于50年代,但一直进展不大。直到1985年,Rumelhart等人提出了误差反向传递学习算法(即BP算),实现了Minsky的多层网络

设想,如图34-1所示。 BP 算法不仅有输入层节点、输出层节点,还可有1个或多个隐含层节点。对于输入信号,要先向前传播到隐含层节点,经作用函数后,再把隐节点的输出信号传播到输出节点,最后给出输出结果。节点的作用的激励函数通常选取S 型函数,如 Q x e x f /11)(-+= 式中Q 为调整激励函数形式的Sigmoid 参数。该算法的学习过程由正向传播和反向传播组成。在正向传播过程中,输入信息从输入层经隐含层逐层处理,并 传向输出层。每一层神经元的状态只影响下一层神经

5.4 BP神经网络的基本原理 BP(Back Propagation)网络是1986年由Rinehart和 McClelland为首的科学家小组提出,是一种按误差逆传播算 法训练的多层前馈网络,是目前应用最广泛的神经网络模型 之一。BP网络能学习和存贮大量的输入-输出模式映射关系, 而无需事前揭示描述这种映射关系的数学方程。它的学习规 则是使用最速下降法,通过反向传播来不断调整网络的权值 和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结 构包括输入层(input)、隐层(hide layer)和输出层(output layer)(如图5.2所示)。 5.4.1 BP神经元 图5.3给出了第j个基本BP神经元(节点),它只模仿了生物神经元所具有的三个最基本 也是最重要的功能:加权、求和与转移。其中x 1、x 2 …x i …x n 分别代表来自神经元1、2…i…n 的输入;w j1、w j2 …w ji …w jn 则分别表示神经元1、2…i…n与第j个神经元的连接强度,即权 值;b j 为阈值;f(·)为传递函数;y j 为第j个神经元的输出。 第j个神经元的净输入值为: (5.12) 其中: 若视,,即令及包括及,则

于是节点j的净输入可表示为: (5.13)净输入通过传递函数(Transfer Function)f (·)后,便得到第j个神经元的输出 : (5.14) 式中f(·)是单调上升函数,而且必须是有界函数,因为细胞传递的信号不可能无限增加,必有一最大值。 5.4.2 BP网络 BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成。正向传播时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元。若在输出层得不到期望的输出,则转向误差信号的反向传播流程。通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程。 5.4.2.1 正向传播 设 BP网络的输入层有n个节点,隐层有q个节点,输出层有m个节点,输入层与隐层之间的权值为,隐层与输出层之间的权值为,如图5.4所示。隐层的传递函数为f (·), 1 (·),则隐层节点的输出为(将阈值写入求和项中): 输出层的传递函数为f 2

BP网络的训练函数 训练方法训练函数 梯度下降法traingd 有动量的梯度下降法traingdm 自适应lr梯度下降法traingda 自适应lr动量梯度下降法traingdx 弹性梯度下降法trainrp Fletcher-Reeves共轭梯度法traincgf Ploak-Ribiere共轭梯度法traincgp Powell-Beale共轭梯度法traincgb 量化共轭梯度法trainscg 拟牛顿算法trainbfg 一步正割算法trainoss Levenberg-Marquardt trainlm BP网络训练参数 训练参数参数介绍训练函数 net.trainParam.epochs最大训练次数(缺省为10)traingd、traingdm、traingda、 traingdx、trainrp、traincgf、 traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlm net.trainParam.goal训练要求精度(缺省为0)traingd、traingdm、traingda、 traingdx、trainrp、traincgf、 traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlm net.trainParam.lr学习率(缺省为0.01)traingd、traingdm、traingda、 traingdx、trainrp、traincgf、 traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlm net.trainParam.max_fail 最大失败次数(缺省为5)traingd、traingdm、traingda、 traingdx、trainrp、traincgf、 traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlm net.trainParam.min_grad 最小梯度要求(缺省为 1e-10)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm net.trainParam.show显示训练迭代过程(NaN表 示不显示,缺省为25)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm net.trainParam.time 最大训练时间(缺省为inf)traingd、traingdm、traingda、 traingdx、trainrp、traincgf、 traincgp、traincgb、trainscg、

%改进BP训练神经网络正模型.m clf tic P=[0.255 0.256 0.258 0.261 0.265 0.270 0.287 0.305 0.322 0.34 0.356 0.374 0.391 0.408 0.425 0.441 0.458 0.474 0.491 0.506 0.522 0.537 0.552 0.566 0.581 0.594 0.608 0.62 0.633 0.645... 0.657 0.669 0.68 0.691 0.701 0.711 0.721 0.731 0.74 0.749 0.757 0.764 0.771 0.777 0.784 0.79 0.795 0.799 0.803 0.806 0.809 0.811 0.812 0.813 0.8135 0.813 0.8125 0.812 0.811 0.810... 0.809 0.808 0.807 0.805 0.804 0.803 0.801 0.799 0.797 0.795... 0.794 0.793 0.7915 0.7905 0.7915 0.793 0.795 0.797 0.799 0.801... ;1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0... 1.0 0.85 0.82 0.81 0.8 0.77 0.75 0.72 0.68 0.65... 0.62 0.53 0.43 0.32 0.21 0.15 0.0 0.0 0.0 -0.1... -0.2 -0.32 -0.43 -0.51 -0.6 -0.52 -0.45 -0.36 -0.29 -0.22... -0.2 -0.17 -0.16 -0.12 -0.05 0.0 0.0 0.0 0.0 0.1... 0.2 0.25 0.32 0.4 0.32 0.21 0.1 0.0 0.0 0.0]; T=[0.256 0.258 0.261 0.265 0.270 0.287 0.305 0.322 0.34 0.356 0.374 0.391 0.408 0.425 0.441 0.458 0.474 0.491 0.506 0.522 0.537 0.552 0.566 0.581 0.594 0.608 0.62 0.633 0.645... 0.657 0.669 0.68 0.691 0.701 0.711 0.721 0.731 0.74 0.749 0.757 0.764 0.771 0.777 0.784 0.79 0.795 0.799 0.803 0.806 0.809 0.808 0.807 0.806 0.805 0.804 0.803 0.802 0.801 0.80... 0.799 0.798 0.797 0.796 0.795 0.795 0.796 0.797 0.798 0.799... 0.8 0.801 0.802 0.803 0.804 0.805 0.805 0.804 0.803 0.802 0.801];[R,Q]=size(P); [S2,Q]=size(T); S1=6; [W1,B1]=nwtan(S1,R); W2=rands(S2,S1)*0.5;

1、BP网络构建 (1)生成BP网络 = (,[1 2...],{ 1 2...},,,) net newff PR S S SNl TF TF TFNl BTF BLF PF R?维矩阵。 PR:由R维的输入样本最小最大值构成的2 S S SNl:各层的神经元个数。 [1 2...] TF TF TFNl:各层的神经元传递函数。 { 1 2...} 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

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'); 说明: minmax(P):由2维p矩阵输入样本最小最大值构成的2*2维矩阵。 [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神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。样本数据: 解:

BP 神经网络原理 2.1 基本BP 算法公式推导 基本BP 算法包括两个方面:信号的前向传播和误差的反向传播。即计算实际输出时按从输入到输出的方向进行,而权值和阈值的修正从输出到输入的方向进行。 图2-1 BP 网络结构 Fig.2-1 Structure of BP network 图中: j x 表示输入层第j 个节点的输入,j =1,…,M ; ij w 表示隐含层第i 个节点到输入层第j 个节点之间的权值; i θ表示隐含层第i 个节点的阈值; ()x φ表示隐含层的激励函数; ki w 表示输出层第k 个节点到隐含层第i 个节点之间的权值,i =1,…,q ; k a 表示输出层第k 个节点的阈值,k =1,…,L ; () x ψ表示输出层的激励函数; k o 表示输出层第k 个节点的输出。 (1)信号的前向传播过程 隐含层第i 个节点的输入net i :

1 M i ij j i j net w x θ==+∑ (3-1) 隐含层第i 个节点的输出y i : 1()() M i i ij j i j y net w x φφθ===+∑ (3-2) 输出层第k 个节点的输入net k : 1 1 1 ()q q M k ki i k ki ij j i k i i j net w y a w w x a φθ====+=++∑∑∑ (3-3) 输出层第k 个节点的输出o k : 111()()()q q M k k ki i k ki ij j i k i i j o net w y a w w x a ψψψφθ===?? ==+=++ ? ??∑∑∑ (3-4) (2)误差的反向传播过程 误差的反向传播,即首先由输出层开始逐层计算各层神经元的输出误差,然后根据误差梯度下降法来调节各层的权值和阈值,使修改后的网络的最终输出能接近期望值。 对于每一个样本p 的二次型误差准则函数为E p : 2 1 1()2L p k k k E T o ==-∑ (3-5) 系统对P 个训练样本的总误差准则函数为: 2 11 1()2P L p p k k p k E T o ===-∑∑ (3-6) 根据误差梯度下降法依次修正输出层权值的修正量Δw ki ,输出层阈值的修正量Δa k ,隐含层权值的修正量Δw ij ,隐含层阈值的修正量 i θ?。 ki ki w E w ??-=?η ; k k E a a η ??=-?;ij ij E w w η??=-?; i i E θη θ??=-? (3-7) 输出层权值调整公式: ki k k k k ki k k ki ki w net net o o E w net net E w E w ??????-=????-=??-=?ηηη (3-8) 输出层阈值调整公式: k k k k k k k k k k net o net E E E a a net a o net a η ηη???????=-=-=-?????? (3-9) 隐含层权值调整公式: i i i ij ij i ij i i ij net y net E E E w w net w y net w η ηη???????=-=-=-?????? (3-10)

BP神经网络的学习 王贵腾 摘要:人工神经网络是近年来的热点研究领域,是人类智能研究的重要组成部分。BP神经网络作为目前应用较多的一种神经网络结构,具有良好的逼近性能,且结构简单,性能优良。但仍存在收敛速度慢,易陷入局部极小值的问题,通过附加动量项法、自适应学习率法、数据归一化法、遗传算法等,可大幅度改善其性能,可广泛应用于多输入多输出的非线性系统。 关键词:BP神经网络;BP算法;动量项;自适应学习率;归一化;遗传算法 1.绪论 1.1人工神经网络概述 人工神经网络(Artificial Neural Network),简称神经网络(NN),是由大量处理单元(神经元)组成的非线性大规模自适应系统。它具有自组织,自适应和自学习能力,以及具有非线性、非局域性,非定常性和非凸性等特点。它是在现代神经科学研究成果的基础上提出的,试图通过模拟大脑神经网络处理,记忆信息的方式设计一种新的机器使之具有人脑那样的信息处理能力。 神经网络作为计算智能与控制的重要分支,在控制领域具有如下优点: 1)能逼近任意L2范数上的非线性函数; 2)信息分布式存储与处理,鲁棒性和容错性强; 3)便于处理多输入多输出问题; 4)具有实现高速并行计算的潜力;

5)具有学习能力,对环境变化具有自适应性,对模型依赖性不强,主要用于解决非线性系统的控制问题。 同时,神经网络控制在多种控制结构中得到应用,如PID控制、模型参考自适应控制、前馈反馈控制、内模控制、逆系统控制、预测控制等。 目前神经网络的研究主要集中在三个方面:理论研究、实现技术研究、应用研究。 1.2 BP神经网络概述 BP神经网络是1986年由Rumelhart和McClelland一同提出的一种多层前馈神经网络。该网络采用BP算法——一种误差反向传播(Back Propagation)算法,其方法是依据负梯度下降方向迭代调整网络的权值和阀值以实现训练误差目标函数的最小化。 由于BP神经网络在实际应用中存在着收敛速度慢、网络结构难以确定、容易陷入局部极小值、泛化能力不强的缺陷,近年来,许多学者为满足实际应用中需要提出了许多改进方法,在网络自身性能的改善方面做了大量而有实际意义的工作,并且在BP神经网络的理论方面的研究和实际问题上应用也取得了丰硕的成果。对BP神经网络的理论研究,概括起来大致分为三个方面:改进激励函数,权值选取优化和网络拓扑结构。 1.3本文研究内容 本文从神经网络出发,研究其中应用最为广泛的BP神经网络模型,分析其缺点和不足,提出改进措施,并探讨其应用。具体研究内

如图所示的多层前向传播神经网络结构。假设对于期望的输入 T T T T t t x x ]05.0,95.0[],[,]3,1[],[2121==。网络权系数的初始值见图。试用BP 算法训练此网络,去神经元激励为x e x f -+=11 )(。 l=1 ;%学习步长 times=5000;%学习次数 x=[1; 3;1];%取样本 t=[0.95;0.05] ;%需要学习的函数t num=0; %实际学习次数 ws1=[1,-2,3;2 0 -1]; %第一层连接权系数 ws2=[1 0 -2;1 -2 3]; %第二层连接权系数 ys=rand(2,times)*0.05; %输出初始为随机量 es=zeros(1,times);%均方差初始值设为 0 %***********学习过程迭代运算 ********* for b=1:times nets1=ws1*x; outs1=logsig(nets1); out=outs1; out(3)=1; nets2=ws2*out; ys(:,b)=logsig(nets2); dets2=(t-ys(:,b)).*ys(:,b).*(1-ys(:,b)); dets1=ws2*[1 0;0 1;0 0]*dets2.*outs1.*(1-outs1); ws1=ws1+dets1*[1 3 1]*l; ws2=ws2+dets2*out'*l; es(b)=norm((t-ys(:,b)),1); if es(b)<0.01 num=b; break; end end w=1:num; ds(1,1:num)=ys(1,1:num); ds(2,1:num)=ys(2,1:num); subplot(2,1,1); plot(w,0.95,'b-',w,0.05,'b-',w,ds(1,1:num),'k-',w, ds(2,1:num),'k-.'); grid on; title('BP 学习方法逼近[0.95,0.05]'); xlabel('x 轴'); ylabel('-逼近0.95,-.-逼近0.05'); %误差曲线 subplot(2,1,2); plot(w,es(1:num)); grid on; title('BP 学习曲线'); xlabel('迭代次数'); ylabel('均方差'); 运行结果如图所示:

学习内容总结成4个小节,具体内容如下: 第一节内容:包括神经网络的基础知识,BP网络的特点,bp主要应用的场合,使用时应注意的问题。 第二节内容:主要是阐述BP中几个容易混淆的概念和问题,包括什么是网络的泛化能力?过拟合是什么,怎么处理?学习速率有什么作用?神经网络的权值和阈值分别是个什么概念?用BP逼近非线性函数,如何提高训练精度? 第三节内容:主要阐述使用matlab实现,为了充分利用数据,得到最优的网络训练结果,在网络建立前,应该进行的基本数据处理问题,包括:BP神经网络matlab实现的基本步骤,数据归一化问题和方法,输入训练数据的顺序排法,以及分类方法,如何查看和保存训练的结果,每次结果不一样问题。 第四节内容:bp神经网络进行交通预测的Matlab例子及源代码,bp神经网络进行交通预测的Matlab程序的优化(主要是根据设置误差要求,寻找最优网络过程) 什么是神经网络? 神经网络是由很多神经元组成的,首先我们看一下,什么是神经元 上面这个图表示的就是一个神经元,不管其它书上说的那些什么树突,轴突的。用个比较粗浅的解释,可能不太全面科学,但对初学者很容易理解: 1、我们把输入信号看成你在matlab中需要输入的数据,输进去神经网络后 2、这些数据的每一个都会被乘上一个数,即权值w,然后这些东东相加后得到u, 3、上面只是线性变化,为了达到能处理非线性的目的,u做了个变换,变换的规则和传输函数有关 可能还有人问,那么那个阀值是什么呢?简单理解就是让这些数据做了个平移,这就是神经元工作的过程。处理后的结果又作为输入,可输给别的神经元,很多这样的神经元,就组成了网络。在matlab中具体用什么算法实现这些,我们先不管,我们需要注意的是怎么使用。比如使用BP的神经网络newff()构建一个网络,这些在后面的学习将提到。 BP网络的特点 ①网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能。这使得它特别适合于求解内部机制复杂的问题。无需建立模型,或了解其内部过程,只需输入,获得输出。只要BPNN结构优秀,一般20个输入函数以下的问题都能在50000次的学习以内收敛到最低误差附近。而且理论上,一个三层的神经网络,能够以

clear all clc pp1=xlsread('inputBP1.xls'); %将名为testdata1的excel表格中的数据导入 tt1=xlsread('outputBP1.xls'); %将名为testdata2的excel表格中的数据导入 pp2=xlsread('inputBP2.xls'); %将名为testdata1的excel表格中的数据导入 tt2=xlsread('outputBP2.xls'); %将名为testdata2的excel表格中的数据导入 %其中p1 t1 分别为输入样本和与之一一对应的输出样本 p1=[pp1,pp2]; t1=[tt1,tt2]; clc p=p1;t=t1; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t) %对样本进行归一化 %设置网络隐单元的神经元数 n=5;%隐层节点数 %建立相应的BP网络 net=newff(minmax(pn),[n,3],{'tansig','tansig'},'trainrp');%红色字体为输出层节点数%和训练函数,其中训练函数可以根据训练效果的不同而更换,备选的函数见下页 inputWeights=net.IW{1,1}; inputbias=net.b{1}; layerWeights=net.IW{1,1}; layerbias=net.b{2}; pause clc % 训练网络 net.trainParam.show=50;%每50步显示一次误差 net.trainParam.lr=0.05;%训练步长 net.trainParam.mc=0.9; net.trainParam.epochs=50000;%最大训练次数 net.trainParam.goal=1e-3;%设定的期望误差,一般为0.001,可以修改 pause clc %调用TRAINSCG算法训练BP网络 net=train(net,pn,tn);%训练函数 %对BP网络进行仿真 A=sim(net,pn); E=A-tn M=sse(E) N=mse(E) echo off save mynet net%保存训练好的网络以备以后循环使用

龙源期刊网 https://www.wendangku.net/doc/ed18489507.html, 用最优化方法解决BP神经网络训练问题 作者:李翔苏成 来源:《电脑知识与技术·学术交流》2008年第12期 摘要:BP神经网络可以有效地对非线性系统进行逼近,但是传统的最速下降搜索方法存在收敛速度慢的问题。本文提出把BP神经网络转化为最优化问题,用一种共轭梯度算法代替最速下降法进行搜索迭代,极大地提高了收敛速度。 关键词:神经网络;最优化;一种共轭梯度算法 中图分类号:TP183文献标识码:A 文章编号:1009-3044(2008)12-20000-00 Training BP Neural Network using optimization methods LI Xiang ,SU Cheng (College of computer science,China University of Mining and Technology, Xuzhou 221000,China) Abstract:BP neural network can efficiently approximate any nonlinear system, but there is a problem of inefficient learning speed with the conventional steepest descent algorithm. In this paper, we try to convert neural network to an optimization model, and apply conjugate gradient algorithm to it to bring a faster learning speed. Keywords:Neural network ;Optimization ; Conjugate gradient algorithm 1 BP神经网络模型 BP(前馈式)神经网络结构简单,可操作性强,能模拟任意的非线性输入输出系统,是目前应用广泛的神经网络模型。BP网络由输入层i、隐含层j、输出层k及各层之间的节点连接权组成,神经元拓扑如图1: 网络的学习过程由信息正向传播和误差反向传播构成:

训练BP神经网络连接权值的源代码 x=[-0.4:0.04:3.6]; y=8+2*exp(1-x.^2).*cos(2*pi*x); net=newff(minmax(x),[20,1],{'tansig','purelin'}); y1=sim(net,x); net.trainParam.epochs=50; net.trainParam.goal=0.01; net=train(net,x,y); y2=sim(net,x); figure; plot(x,y,'-',x,y1,'-',x,y2,'--'); title('原函数与网络训练前后的确仿真结果比较'); text(2,12,'原函数y'); text(2,11,'-未训练网络的仿真结果y1'); text(2,10,'--训练后网络的仿真结果y2'); 这个程序如何转化成 训练BP神经网络连接权值的源代码(matlab) Ir=0.05; %Ir为学习速率 err_goal=0.001;%期望最小误差值 max_epoch=10000; X=[0.75 1 0 1;0.25 0 0.55 0;0 0 0.45 0;0 0 0 0;0 0 0 0;1 1 1 1;0.5 0 0.5 0.5;0.5 0 0.5 0.5;0 1 0 0;1 1 1 1;0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0;1 1 1 1]; T=[0 0 0 0;0 1 1 1;0 0 0 0;1 0 0 0];%提供4组15输入4输出训练集和目标集 [M,N]=size(X);q=10;[L,N]=size(T); Wij=rand(q,M); Wki=rand(L,q); b1=zeros(q,1);b2=zeros(L,1);-随机给定隐含层、输出层偏值 for epoch=1:max_epoch Oi=tansig(Wij*X,b1); Ok=purelin(Wki*Oi,b2); E=T-Ok; deltak=deltalin(Ok,E);%计算输出层的delta deltai=deltatan(Oi,deltak,Wki);%计算隐含层的deita [dWki,db2]=learnbp(Oi,deltak,Ir);%调整输出层加权系数 Wki=Wki+dWki;b2=b2+db2; [dWij,db1]=learnbp(X,deltai,Ir); Wij=Wij+dWij;b1=b1+db1; SSE=sumsqr(T-purelin(Wki*tansig(Wij*X,b1),b2)); if(SSE

相关文档