首页 > 编程知识 正文

bp算法推导详细过程,BP算法详解

时间:2023-05-05 04:50:44 阅读:148054 作者:1677

BP算法的实现旨在简单实现经典BP算法的核心代码,加深对该算法的理解,便于下一步的深入学习。 参考了那个程序

对BP算法进行了理论推导,对其梯度下降、反向传播有了一定的了解,但有些公式并不通用; 虽然理解了学习率、步骤的基础概念,但对激励函数的含义、如何选取激励函数还不太了解。

背景1986年,Rumelhart,Hinton和Williams共同在《自然》杂志上推出了知名的反向传播算法(BP ),首次阐述了BP算法在浅层前向神经网络模型中的应用,http://www .

BP算法的实现步骤

程序流程图

代码实现clc; clear all; %准备培训集的%人数(单位:万人) number of people=[ 20.5522.4425.3727.1329.4530.1030.9634.0636.4238.0939.] omobile=[0. 60.750.850.91.051.351.451.61.852.152.25 ) 2.32.5 ) 2.6 ) 2.85 ) 2.95.1]; %道路面积(单位:万平方公里) roadarea=[0.09(0.11 ) 0.11 ) 0.14 ) 0.23 ) 0.32 ) 0.36 ) 0.38.40.56 ) 0.59 ) 0.67.0 %道路交通量(单位:万人) passenger volume=[ 5126621773091451046011387123531575018304198362102419825982344444236400 ht volume=[ 1237137913851399166317141834432893611099112031120311111513201676218673207242080321804 ] I=3; %输入数据维j=8; %隐层神经元数k=2; %输出数据维SampleNum=20; %采样数%输入数据矩阵input=[numberOfPeople; numberOfAutomobile; roadArea]; %目标(输出)数据矩阵output=[passengerVolume; freightVolume]; %对训练集中的输入数据矩阵和目标数据矩阵执行归一化处理[sampleInput,minp,maxp,tmp,mint,maxt]=premnmx(input,output ); %噪声强度noiseIntensity=0.01; %正态分布产生的噪声noise=noiseintensity*Randn(k,SampleNum ); 对%采样输出矩阵tmp添加噪声,避免网络过度拟合sampleOutput=tmp noise; w1=rand([jI]; %j个神经元隐层的权重系数w2=rand([kj]; %k个输出层的权重系数theta1=rand([j,1]; %隐藏层阈值theta2=rand([k,1]; %输出层阈值dw1=Zeros(j,I ); %隐层权重系数校正量dw2=Zeros(k,j ); %输出层权重系数校正量dtheta1=Zeros([j,1]; %隐层阈值校正量dtheta2=Zeros([k,1]; %输出层阈值校正量alpha=0.9; %权重系数修正常数,一般区0.7-0.9左右,目的是为了加速LearnRate=0.035的收敛; %学习速度或步长通常在0-1之间。 error0=0.65*10^(-3; %训练网络应达到的目标误差maxEpochs=50000; %最大训练次数errorHistory=[]; %守恒能量函数(误差平方和)的历史forn=1: maxepochsforelement=1: sample numx0=sample input ) 3360,element; y=sampleoutput(:element ); x1=f([w1Theta1]*[x0; 1 ); %非显示层的输出x2=f([w2theta2]*[x1; 1 ); %输出%反向传播D2=X2.*(1-X2 ).* ) *(X2-Y ); %输出层学习误差D1=x1.*(1-x1 ).* ) *(W2'*d2 ); %学习误差反向传播dtheta2=-learnrate*D2.*ones(k,1 ) Alpha*dTheta2; %计算修正阈值dtheta1=-learnrate*D1.*ones(j,1 ) Alpha*dTheta1; dW2=-LearnRate*d2*X1' Alpha*dW2; 计算%修正权重系数(需要上次修正量) dW1=-LearnRate*d1*X0' Alpha*dW1; W2=W2 dW2; W1=W1 dW1; Theta2=Theta2 dTheta2; Theta1=Theta1 dTheta1; ende=sumsqr(y-x2 ); %能量均方误差errorHistory=[errorHistory E]; 保存%历史将有助于观察if E error0 break; %误差满足要求后结束打印(error history 1:100 ); functiony=f(x ) %Sigmoid函数y=1./)1exp(-x ); end%参考程序https://blog.csdn.net/yanyanwenmeng/article/details/89061169 [1]舒畅草丛. BP神经网络学习算法研究[ d

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。