📄 bp222.m
字号:
function [a i sse]=bp222(n,m,l,lr,f)
%三层bp网络学习算法
%选择不同的节点个数和学习速率
%n为输入层节点个数
%m为中间隐层的节点个数
%l为输出层节点个数
%lr为学习速率:');
%f为转移函数(1为logsig,2为tansig)
%学习数据和目标向量
p=-ones(n,3);
t=ones(l,3);
%没有指定学习数据和目标向量,我就随便写了
% 初始化
[w1 b1]=rands(m,n);
[w2 b2]=rands(l,m);
%定义网络的训练参数
err_goal=0.0001;
max_epoch=20000;
%训练
[dw1,db1]=rands(m,n);
[dw2,db2]=rands(l,m);
mc=0.5;
nntwarn off;
switch f
case 1
for i=1:max_epoch
%工作信号正向传播
a1=logsig(w1*p,b1);
a2=logsig(w2*a1,b2);
%误差信号反向传播
e=t-a2;
d2=deltalog(a2,e);
d1=deltalog(a1,d2,w2);
[dw1,db1]=learnbpm(p,d1,lr,mc,dw1,db1);
[dw2,db2]=learnbpm(a1,d2,lr,mc,dw2,db2);
w1=w1+dw1;
b1=b1+db1;
w2=w2+dw2;
b2=b2+db2;
sse=sumsqr(t-logsig(w2*logsig(w1*p,b1),b2));
if sse<err_goal
break
end
end
a=simuff(p,w1,b1,'logsig',w2,b2,'logsig');
case 2
for i=1:max_epoch
%工作信号正向传播
a1=tansig(w1*p,b1);
a2=tansig(w2*a1,b2);
%误差信号反向传播
e=t-a2;
d2=deltatan(a2,e);
d1=deltatan(a1,d2,w2);
[dw1,db1]=learnbpm(p,d1,lr,mc,dw1,db1);
[dw2,db2]=learnbpm(a1,d2,lr,mc,dw2,db2);
w1=w1+dw1;
b1=b1+db1;
w2=w2+dw2;
b2=b2+db2;
sse=sumsqr(t-tansig(w2*tansig(w1*p,b1),b2));
if sse<err_goal
break
end
end
a=simuff(p,w1,b1,'tansig',w2,b2,'tansig');
otherwise
warning('请正确选择转移函数')
return
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -