📄 bp_example2.m
字号:
%--------------------------------------------------------------------------
% 利用两层BP网络完成函数逼近,其中隐层的神经元个数选为5个
%
% initff—对前向网络初始化
% simuff—对前向网络仿真
% trainbp--用BP算法训练前向网络
%--------------------------------------------------------------------------
clf; % 从当前图形窗口删除所有图形对象,恢复图形窗口属性的默认设置
figure(gcf); % gcf--获得当前图形窗口的句柄
% set(gcf,300,300);
% set(gcf, 'PaperPosition', [2 1 4 2]);
echo on; % 允许在屏幕上显示批处理命令行
clc;
p=-1:0.1:1; % p为输入矢量
t=[-0.9602 -0.577 -0.0729 0.3771 0.6405 0.66 0.4609...
0.1336 -0.2013 -0.4344 -0.5 -0.393 -0.1647 0.0988...
0.3072 0.396 0.3449 0.1816 -0.0312 -0.2189 -0.3201]; % t为目标矢量
plot(p,t,'+','linewidth',2,'markersize',14);
title('Training Vectors','fontsize',24,'fontweight','bold');
xlabel('Input Vector P','fontsize',24,'fontweight','bold');
ylabel('Target Vector T','fontsize',24,'fontweight','bold');
pause;
clc;
S1=5;
[w1,b1,w2,b2]=initff(p,S1,'tansig',t,'purelin'); % 初始化神经元,w是权值,b是阈值
echo off;
k=pickic(1);
if k==2
w1=[3.5; 3.5; 3.5; 3.5; 3.5];
b1=[-2.8562; 1.0774; -0.588; 1.4083; 2.8722];
w2=[0.2622 -0.2375 -0.4525 0.2361 -0.1718];
b2=[0.1326];
end
echo on;
clc;
disp_freq=20; % 学习过程显示频率
max_epoch=8000; % 最大训练步数
err_goal=0.02; % 误差指标
lr=0.01; % 学习率
tp=[disp_freq max_epoch err_goal lr];
[w1,b1,w2,b2,epochs,tr]=trainbp(w1,b1,'tansig',w2,b2,'purelin',p,t,tp); % 用BP算法训练前向网络
pause;
clc;
p=0.5; % 利用训练完的感知器神经元进行分类
% p=0.5时,理想输出值=0.396
a=simuff(p,w1,b1,'tansig',w2,b2,'purelin') % 对输入矢量预处理
pause;
clc;
ploterr(tr,eg); % 画出误差曲线
echo off;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -