赞
踩
BP神经网络结构框图
函数信号正向传播:输入——隐层——输出,最终得到估算出来的误差
误差信号反向调整:输出——隐层——输入,通过代价函数J(误差的平方和),采用梯度下降法对于权值进行逐一调整
隐层输入in=输入层输入X*输入与隐层间的权值W1-阈值theta
隐层输出out=f(隐层输入),其中f为sigmoid函数=(1/(1+exp(-β*in)))
输出层y=w2*out
例题:
训练样本:
input=[0,0.1,0.2,0.3,0.4]
output=[4,2,2,2,2]
- clear all;
- close all;
- %训练样本
- NUM=5;
- input=[0,0.1,0.2,0.3,0.4];%输入
- output=[4,2,2,2,2];%期望输出
- w1=rand(1,5);
- w2=rand(1,5);
- theta=rand(1,5);
- beta=rand(1,5);
-
- learn_rate1=0.0015;
- learn_rate2=0.0015;
- learn_rate3=0.0015;
- learn_rate4=0.0015;
- j=[];
-
- for k=1:200000
- %清空输出存储值
- for i=1:NUM
- yout(i)=0;%网络输出
- end
- %正向传播
- for i=1:NUM
- z(i)=w1(i)*input(i)-theta(i);%隐层输入
- fz(i)=1/(1+exp(-beta(i)*z(i)));%隐层输出
- yout(i)=w2(i)*fz(i);%输出层输出
- end
- for i=1:NUM
- error(i)=0;%清空误差
- end
-
- for i=1:NUM
- error(i)=output(i)-yout(i);%计算误差=样本值-网络输出值
- end
-
- J=0;
- for i=1:NUM
- J=J+error(i)^2/2;%计算目标函数
- end
- j(end+1)=J;
- if J<0.001
- break;
- end
- %反向调整
- %目标函数对w2求偏导
- for i=1:NUM
- J_w2(i)=-error(i)*fz(i);
- end
-
- %目标函数对w1求偏导
- for i=1:NUM
- J_w1(i)=-error(i)*w2(i)*beta(i)*exp(-beta(i)*z(i))*fz(i)^2*input(i);
- end
-
- %目标函数对beta求偏导
- for i=1:NUM
- J_beta(i)=-error(i)*w2(i)*z(i)*exp(-beta(i)*z(i))*fz(i)^2;
- end
-
- %目标函数对theta求偏导
- for i=1:NUM
- J_theta(i)=error(i)*w2(i)*beta(i)*exp(-beta(i)*z(i))*fz(i)^2;
- end
-
- %参数调整
- for i=1:NUM
- w1(i)=w1(i)-learn_rate1*J_w1(i);%逐一调整参数
- w2(i)=w2(i)-learn_rate2*J_w2(i);
- beta(i)=beta(i)-learn_rate3*J_beta(i);
- theta(i)=theta(i)-learn_rate4*J_theta(i);
- end
- end
- % times
- figure(1) ;
- hold on;
- plot(input,yout,'b');
- plot(input,output,'r');
- figure(2);
- plot((1:k),j,'b');
-
-
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。