📄 bp_example1.m
字号:
%--------------------------------------------------------------------------
% 利用BP网络对一个简单的非线性神经元进行训练。
%
% initff—对前向网络初始化
% simuff—对前向网络仿真
% tbp1—训练一层前向网络
% trainbp--用BP算法训练前向网络
%--------------------------------------------------------------------------
clf; % 从当前图形窗口删除所有图形对象,恢复图形窗口属性的默认设置
figure(gcf); % gcf--获得当前图形窗口的句柄
% set(gcf,300,300);
% set(gcf, 'PaperPosition', [2 1 4 2]);
echo on; % 允许在屏幕上显示批处理命令行
clc;
p=[-3 2]; % p为输入矢量
t=[0.4 0.8]; % t为目标矢量
pause;
clc;
wv=-4:0.4:4; % wv: 权值行向量
bv=-4:0.4:4; % bv: 阈值行向量
es=errsurf(p,t,wv,bv,'logsig'); % 单输入神经元的误差曲面,转移函数为对数S型
plotes(wv,bv,es,[60 30]); % 画出单输入神经元的误差曲面,[60 30]是视角
pause;
clc;
[w,b]=initff(p,t,'logsig'); % 初始化神经元,w是权值,b是阈值
echo off;
k=pickic(1);
if k==2
w=-2.1617;
b=-1.7863;
elseif k==3
subplot(1,2,2);
h=context('*CLICK ON ME*');
[w,b]=ginput(1);
delete(h);
end
echo on;
clc;
% 训练方法一
% df=5; % 学习过程显示频率
% me=100; % 最大训练步数
% eg=0.01; % 误差指标
% lr=2; % 学习率
% [w,b,ep,tr]=tbp1(w,b,'logsig',p,t,[df me eg lr],wv,bv,es,[60 30]); % 训练一层前向网络
% 训练方法二
disp_freq=1;
max_epoch=100;
err_goal=0.001;
lr=2;
tp=[disp_freq max_epoch err_goal lr];
[w,b,epochs,tr]=trainbp(w,b,'logsig',p,t,tp); % 用BP算法训练前向网络
pause;
clc;
ploterr(tr); % 画出误差曲线
pause;
clc;
p=[-1.2]; % 利用训练完的感知器神经元进行分类
a=simuff(p,w,b,'logsig') % 对输入矢量预处理
echo off;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -