📄 bpnet.m
字号:
%编制两输入,六隐层神经元,单输出的MLP程序,逼近函数
%y=sin(pi*x1)*cos(pi*x2);x1=[-1 ... 1],x2=[-1 ... 1]
%提示:训练输出要取遍输入空间网格上的每个点
close all;
clear all;
%原函数
x1=-1:.01:1;
x2=-1:.01:1;
for i=1:length(x1)
for j=1:length(x2)
Y(i,j)=sin(pi*x1(i))*cos(pi*x2(j));
end
end
[xx1,xx2] = meshgrid(-1:.01:1, -1:.01:1);
subplot(2,1,1);
mesh(xx1,xx2,Y);
title('原函数三维图');
learn_rate=0.1;%学习速率
epsinit=0.1;
n=12;%输入层神经元的个数
nepoch=400;%循环次数
errsq=zeros(nepoch,1);
w1=epsinit*randn(2,n);%初始化权值
w2=epsinit*randn(n,1);
b1=epsinit*randn(n,1);%初始化阈值
b2=epsinit*randn(1,1);
for iepoch=1:nepoch;
for i=1:length(x1)
for j=1:length(x2)
xx=[x1(i);x2(j)];%网络的输入值
yy1=w1'*xx+b1;
y1=tanh(yy1);%隐含层输出
yy2=w2'*y1+b2;
y2(i,j)=tanh(yy2);%网络输出
y2err=sech(yy2).*sech(yy2).*(Y(i,j)-y2(i,j));%输出层偏差
y1err=sech(yy1).*sech(yy1).*(w2*y2err);%输入层偏差(误差的反向传播)
w2=w2+learn_rate*y1*y2err';%输出层权值更新
b2=b2+learn_rate*y2err;%输出层阈值更新
w1=w1+learn_rate*xx*y1err';%输入层权值更新
b1=b1+learn_rate*y1err;%输入层阈值更新
errsq(iepoch)=errsq(iepoch)+(y2(i,j)-Y(i,j))'*(y2(i,j)-Y(i,j));
end
end
end
subplot(2,1,2);
mesh(xx1,xx2,y2);
title('训练函数三维图');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -