📄 mybp.m
字号:
function out=mybp()
clear all
N=16; %学习样本个数(number)
In=4; %输入层神经元个数(Input number)
Hn=10; %隐层神经元个数(Hidden number)
On=4; %输出层神经元个数(Output number)
times=800; %学习次数
eta_hi=0.9; %定义隐层到输入层的学习速率
eta_oh=0.9; %定义输出层到隐层的学习速率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 主程序部分
fid = fopen('trainingdata.txt');
X= (fscanf(fid,'%g',[In N]))' %读入待训练数据
fid = fopen('teacherdata.txt');
T= (fscanf(fid,'%g',[On N]))' %读入期望输出
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Whi=initw(In,Hn); %输入层和隐层之间权值的初始化
Woh=initw(Hn,On); %隐层和输出层之间权值的初始化
thh=initw(1,Hn); %隐层阈值初始化(threshold of hidden)
tho=initw(1,On); %输出层阈值初始化(threshold of output)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%计算第n次迭代时的实际输出%%%%%%%%%%%%%%%%
for m=1:times
E=0;
for n=1:N
temp1=X(n,:); %取出X第n行,即第n组学习样本
Teacher=T(n,:); %读入教师数据给Teacher
for j=1:Hn
temp2=Whi(:,j); %取出Whi第j列,即第j个神经元所对应的权值
net_h(j)=temp1*temp2+thh(j);
Y(j)=f1(net_h(j)); %求出隐层的输出
end
for k=1:On
temp3=Woh(:,k); %取出Woh第k列,即第k个神经元所对应的权值
net_o(k)=Y*temp3+tho(k);
Z(k)=f2(net_o(k)); %求出输出层的输出
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:Hn
for k=1:On %输出层到隐层的权值调整
delta_o(k)=(Teacher(k)-Z(k))*derif2(net_o(k));
delta_Woh(j,k)=eta_oh*delta_o(k)*Y(j);
end
end
for k=1:On,
delta_tho(k)=eta_oh*delta_o(k); %输出层阈值的变化
end
for i=1:In %隐层到输入层的权值调整
for j=1:Hn
sigma=0;
for k=1:On
sigma=sigma+Woh(j,k)*delta_o(k);
end
delta_h(j)=derif1(net_h(j))*sigma;
delta_Whi(i,j)=eta_hi*delta_h(j)*temp1(i);
end
end
for j=1:Hn
delta_thh(j)=eta_hi*delta_h(j); %隐层阈值的变化
end
Woh=Woh+delta_Woh; %更新输出层到隐层的权值
Whi=Whi+delta_Whi; %更新隐层到输出层的权值
tho=tho+delta_tho; %更新输出层阈值
thh=thh+delta_thh; %更新隐层阈值
E=E+Err(Teacher,Z,On); %计算误差
[temp1 Teacher Z Err(Teacher,Z,On)]
end
Error(m)=E;
end
out=plot(Error);
save W Woh Whi tho thh
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Programmed by XFX, Thanks for advice: fangxur@gmail.com
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -