📄 bp_mlp1015.m
字号:
function BP_MLP
clear;
clc;
sample_num=9;
test_num=361;
h_unitnum=4;
i_unitnum=1;
o_unitnum=1;
xmin = 0;
xmax = 2*pi;
p = xmin:(xmax-xmin)/(sample_num-1):xmax ;%i_unitnum*sample_num
t = sin(p);
%归一化
p1 = (p-min(p))/(max(p)-min(p));
t1 = (t-min(t))/(max(t)-min(t));
alpha=0.072;
eita = 0.04;
threshold = 0.01;
w_h = rand(h_unitnum,i_unitnum)+0.01;%h_unitnum*i_unitnum
w_o = rand(o_unitnum,h_unitnum)+0.01;%o_unitnum*h_unitnum
b_h = rand(h_unitnum,1);%h_unitnum*1
b_o = rand(o_unitnum,1);%o_unitnum*1
w_h_exp = [w_h (-1).*b_h];%h_unitnum*(i_unitnum+1)输入当隐层的权值扩展
w_o_exp = [w_o (-1).*b_o];%o_unitnum*(h_unitnum+1)隐层到输出的权值扩展
p_exp = [p1' ones(sample_num,1)]';% (i_unitnum+1)*sample_num采样输入扩展
error=[];
epoch = 1;
epochmax=20000;
delta_o1old = zeros(1,(h_unitnum+1));
delta_h1old = zeros(h_unitnum,(i_unitnum+1));
for i=1:epochmax
epoch = epoch+1;
h_out = logsig(w_h_exp*p_exp); %h_unitnum*sample_num隐层输出
h_out_exp = [h_out' ones(sample_num,1)]';%(h_unitnum+1)*sample_num隐层输出扩展
o_out = w_o_exp*h_out_exp;%o_unitnum*sample_num
et = t1-o_out;
e = sumsqr(et);
error = [error e];
%判断
if e<threshold
break;
end
%反向计算误差
%隐层到输出权值更新
delta_o = et;
delta_o1 = delta_o*h_out_exp';
w_o_exp = w_o_exp+alpha*((1-eita)*delta_o1+eita*delta_o1old);
delta_o1old = delta_o1;
%输入到隐层权值更新
delta_h = w_o'*delta_o.*h_out.*(1-h_out);%h_unitnum*sample_num
delta_h1 = delta_h*p_exp';%h_unitnum*(i_unitnum+1)
w_h_exp = w_h_exp+alpha*((1-eita)*delta_h1+eita*delta_h1old);
delta_h1old = delta_h1;
end
%输出训练
figure(1);
plot(1:(epoch-1),error);
figure(2);
plot(p,o_out,'g');
hold on;
plot(p,t,'r');
%以下测试输出
P = xmin:(xmax-xmin)/(test_num-1):xmax ;%i_unitnum*sample_num
T = sin(P);
%归一化
P1 = (P-min(P))/(max(P)-min(P));
Dp_exp = [P1' ones(test_num,1)]';% (i_unitnum+1)*sample_num采样输入扩展
Dh_out = logsig(w_h_exp*Dp_exp); %h_unitnum*sample_num隐层输出
Dh_out_exp = [Dh_out' ones(test_num,1)]';%(h_unitnum+1)*sample_num隐层输出扩展
Do_out = w_o_exp*Dh_out_exp;%o_unitnum*sample_num
T1 = 2.*Do_out-1;
figure(3);
plot(P,T,'r');
hold on;
plot(P,T1,'g');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -