📄 bpalgorithm.m
字号:
clear
lr=0.05; %lr为学习速率
err_goal=0.00001; %err_goal为期望误差最小值
max_epoch=20000; %max_epoch为训练的最大次数
X=[0.00 0.00 0.00 0.10 0.10 0.00 0.00 0.00 0.90 0.00;
0.00 0.30 0.00 0.80 0.10 0.00 0.00 0.30 0.00 0.00;
0.00 0.10 0.00 0.00 0.10 0.00 0.10 0.10 0.00 0.00;
0.00 0.60 0.00 0.10 0.10 0.00 0.90 0.60 0.00 0.00;
0.90 0.00 0.40 0.00 0.20 0.20 0.00 0.00 0.00 0.00;
0.05 0.00 0.50 0.00 0.10 0.15 0.00 0.00 0.00 0.80;
0.05 0.00 0.10 0.00 0.10 0.40 0.00 0.00 0.00 0.20;
0.00 0.00 0.00 0.00 0.10 0.00 0.00 0.00 0.10 0.00;
0.00 0.10 0.00 0.00 0.10 0.25 0.00 0.00 0.00 0.00];
T=[1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00;
0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00;
0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00;
0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00;
0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00;
0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00;
0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00;
0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00;
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00;
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00];
[M,N]=size(X);q=12;[L,N]=size(T); %q为隐含层节点的数目
[Wij,b1,Wki,b2]=initff(X,q,'tansig',T,'purelin'); %利用initff()函数对BP神经网络各层的权值和偏置值初始化。
for epoch=1:max_epoch
Oi=tansig(Wij*X,b1); %计算网络隐含层的各神经元输出
Ok=purelin(Wki*Oi,b2); %计算网络输出层的各神经元输出
E=T-Ok; %计算网络误差
deltak=deltalin(Ok,E); %计算输出层的delta
deltai=deltatan(Oi,deltak,Wki); %计算隐含层的delta
[dWki,db2]=learnbp(Oi,deltak,lr); %调整输出层加权系数
Wki=Wki+dWki;b2=b2+db2;
[dWij,db1]=learnbp(X,deltai,lr); %调整隐含层加权系数
Wij=Wij+dWij;b1=b1+db1;
SSE=sumsqr(T-purelin(Wki*tansig(Wij*X,b1),b2)); %计算网络权值修正后的误差平方和
if(SSE<err_goal)break;end
end
epoch %显示计算次数
%根据训练好的Wij,Wki和给定的输入计算输出
X1=X; %给定输入
Oi=tansig(Wij*X1,b1); %计算网络隐含层的各神经元输出
Ok=purelin(Wki*Oi,b2); %计算网络输出层的各神经元输出
Ok
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -