有關BP演算法權值修正的過程 用matlab程式設計 跪求c_a_l_m 2011-04-21

clc

clear

t1 = tic;

%t1 = clock;

load data

%% 資料累加作為網路輸入

[n,m]=size(X);

for i=1:n

for j=1:m

y(i,j)=sum(X(1:i,j));

end

end

%% 網路引數初始化

a=0。3+rand(1)/4;

for k=1:(m-1)

b(k)=0。3+rand(1)/4;

end

%% 學習速率初始化

for k=1:(m-1)

u(k)=0。0015;

end

%% 權值閥值初始化

t=1;

w11=a;

w2(1,1)=-y(1,1);

for k=2:m

w2(k)=2*b(k-1)/a;

end

for k=1:m

w3(k)=1+exp(-a*t);

end

theta1=0;

for k=1:(m-1)

theta1=theta1+b(1,k)*y(1,(k+1))/a;

end

theta2=(1+exp(-a*t))*(theta1-y(1,1));

kk=1;

%% 迴圈迭代

for j=1:10

%迴圈迭代

E(j)=0;

for i=1:(n-6)

%% 網路輸出計算

t=i;

%LB層輸出

LB_b=1/(1+exp(-w11*t));

%LC層輸出

LC_c(1,1)=LB_b*w2(1,1);

for k=2:m

LC_c(k)=y(i,k)*LB_b*w2(1,k);

end

%LD層輸出

LD_d=0;

for k=1:m

LD_d=LD_d+w3(1,k)*LC_c(1,k);

end

%閥值

theta3=0;

for k=2:m

theta3=theta3+w2(1,k)*y(i,k)/2;

end

theta4=(1+exp(-w11*t))*(theta3-y(1,1));

%網路輸出值

ym=LD_d-theta4;

yc(i)=ym;

%% 權值修正

error=ym-y(i,1); %計算誤差

E(j)=E(j)+abs(error); %誤差求和

%計算誤差

for k=1:m

errorr(k)=error*(1+exp(-w11*t));

end

thetaE0=0;

for k=1:m

thetaE0=thetaE0+w2(1,k)*errorr(1,k);

end

thetaE=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*thetaE0;

%修改權值

for k=2:m

w2(1,k)=w2(1,k)-u(k-1)*errorr(1,k)*LB_b;

end

w11=w11+a*t*thetaE;

end

end

%畫誤差隨進化次數變化趨勢

figure(1)

plot(E)

title(‘訓練誤差’,‘fontsize’,12);

xlabel(‘進化次數’,‘fontsize’,12);

ylabel(‘誤差’,‘fontsize’,12);

%print -dtiff -r600 28-3

%根據訓出的神經網路進行預測

for i=(n-5):n

t=i;

LB_b=1/(1+exp(-w11*t)); %LB層輸出

LC_c(1,1)=LB_b*w2(1,1); %LC層輸出

for k=2:m

LC_c(1,k)=y(i,k)*LB_b*w2(1,k); %LC層輸出

end

LD_d=0;

for k=1:m

LD_d=LD_d+w3(1,k)*LC_c(1,k); %LD層輸出

end

theta5=0;

for k=2:m

theta5=theta5+w2(1,k)*y(i,k)/2;

end

theta6=(1+exp(-w11*t))*(theta5-y(1,1)); %閥值

ym=LD_d-theta6; %網路輸出值

yc(i)=ym;

end

yc=yc*10;

y(:,1)=y(:,1);

%計算預測

for j=n:-1:2

ys(j)=(yc(j)-yc(j-1))/10;

end

figure(2)

plot(ys((n-5):n),‘-*’);

hold on

plot(X((n-5):n,1),‘r:o’);

legend(‘預測值’,‘實際值’)

title(‘灰色神經網路預測’,‘fontsize’,12)

xlabel(‘x’,‘fontsize’,12)

ylabel(‘y’,‘fontsize’,12)