📄 bp.txt
字号:
%用bp神经网络对sin(x)拟合,隐含层采用sigmoid函数,输出层采用线性函数,
function ann()
g=0.06; %学习速率
e=0.01; %误差评价值
p=5; %隐含层神经元数
m1=0.9; %线性函数的系数
m2=-1.5; %线性函数的截距
x=(0:pi/100:2*pi); %产生输入样本
a1=zeros(1,p); %隐层阈值
a2=0; %输出阈值
[a,b]=size(x); %得到b个输入样本
for i=1:b
d(i)=cos(x(i)); %得到b个输入样本对应的教师信号
end
for i=1:p
w(i)=rand(1); %对输入层和输出层的连接权进行初始化
v(i)=rand(1); %对隐含层和输出层的连接权进行初始化
end
%c=1; %c为训练次数
E1=1;
n=1;
t1=0;
while E1>=e
E1=0;
while(n<=b) %训练b个样本
net2=0;
for i=1:p
net1(i)=x(n)*w(i)+a1(i); %计算隐含层输入
o(i)=(1+exp(-(net1(i))))^(-1); %计算隐含层输出
end
for i=1:p
net2=net2+o(i)*v(i);
end
net2=net2+a2; %计算输出层输入
y(n)=m1*net2+m2; %计算输出层输出
E=0.5*((y(n)-d(n))^2); %计算第n样本的误差
for i=1:p
v(i)=v(i)-g*(y(n)-d(n))*m1*o(i); %调整输出层和隐层间的权值
end
a2=a2-g*(y(n)-d(n))*m1; %输出阈值调整
for i=1:p
w(i)=w(i)-g*(y(n)-d(n))*v(i)*(o(i)*(1-o(i)))*x(n); %调整输入层和隐层间的权值
a1(i)=a1(i)-(y(n)-d(n))*v(i)*o(i)*(1-o(i))*g; %输入阈值调整
end
E1=E1+E;
n=n+1; %准备下一个样本
end
t1=t1+1;
w1(t1)=w(1);
w2(t1)=w(2);
w3(t1)=w(3);
w4(t1)=w(4);
w5(t1)=w(5);
v1(t1)=v(1);
v2(t1)=v(2);
v3(t1)=v(3);
v4(t1)=v(4);
v5(t1)=v(5);
E1
E2(t1)=E1;
n=1;
end
for n=1:b
net2=0;
for i=1:p
net1(i)=x(n)*w(i)+a1(i); %计算隐含层输入
o(i)=(1+exp(-(net1(i))))^(-1); %计算隐含层输出
end
for i=1:p
net2=net2+o(i)*v(i);
end
net2=net2+a2; %计算输出层输入
y(n)=m1*net2+m2; %计算输出层输出
end
figure(1)
plot(x,y,'g',x,d,'b--+') %输出教师与拟合函数
title('BP网络辨识效果')
figure(2)
i=1:1:t1;
plot(i,w1,i,w2,i,w3,i,w4,i,w5)
title('中间层权值变化趋势')
figure(3)
plot(i,v1,i,v2,i,v3,i,v4,i,v5)
title('输出层权值变化图')
figure(4)
plot(i,E2);
title('误差变化趋势')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -