📄 g8.m
字号:
% ***自适应学习率调整算法训练BP网络设计实例***
% 在实际应用中,原始的BP算法很难胜任,因此出现了很多的改进算法。BP算法的改进主要有两种途径,
% 一种是采用启发式学习方法,另一种是采用更为有效的优化算法。
% 在神经网络工具箱中,函数trainbpx()采用动量法和学习自适应调整两种策略,
% 从而提高了学习速度并增加了算法的可靠性。动量法降低了网络对于误差曲面局部细节的敏感性,
% 有效地抑制了网络陷于局部极小;自适应调整学习率有利于缩短学习时间。
clf reset
figure(gcf)
colordef(gcf,'none')
% setfsize(500,200);
echo on
clc
%INITFF--初始化前向网络
%TRAINBPX--用快速反向误差传播算法训练前向网络
%SIMUFF--仿真前向网络
%用快速反向误差传播算法逼近函数
%用给定的输入和目标输出训练一个两层神经网络
pause %按任意键,则程序继续运行
clc
%DEFINING A VECTOR ASSOCATION PROBLEM
%==============================================
%P代表一个21组单输入矢量(列向量)
P=-1:0.1:1;
%T代表与P相对应的单输出目标矢量(列向量)
T=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];
pause %按任意键后,可以观察数据曲线
clc
%PLOTTING THE DATA POINTS
%=============================================
%绘制训练数据曲线
plot(P,T,'+');
title('Training Vectors');
xlabel('Input Vector P');
ylabel('Target Vector T');
%神经网络学习函数必须通过这些数据点
pause %按任意键开始设计网络
clc
%DESIGN THE NETWORK
%=============================================
%将要训练一个两层网络(TANSIG/PURELIN)
%隐层神经元(TANSIG函数)数目应能映射复杂问题
S1=5;
%INITFF函数用来初始化(TANSIG/PURELIN)神经元的权值和阈值
[w1,b1,w2,b2]=initff(P,S1,'tansig',T,'purelin');
echo off
k=pickic;
if k==2
w1=[3.5000;3.5000;3.5000;3.5000;3.5000];
b1=[-2.8562;1.0774;-0.5880;1.4083;2.8722];
w2=[0.2622 -0.2375 -0.4525 0.2361 -0.1718];
b2=[0.1326];
end
echo on
clc
%TRAINING THE NETWORK
%=============================================
%TRAINBPX函数用误差反向传播算法训练前向网络
df=10; %设定(程序在循环内的)显示间隔次数
me=8000; %设定最大循环次数
eg=0.001; %目标误差平方和
lr=0.01; %学习速率
tp=[df me eg lr];
%训练开始。。。。,请耐心等待!
[w1,b1,w2,b2,ep,tr]=trainbpx(w1,b1,'tansig',w2,b2,'purelin',P,T,tp);
%训练结束后,TRAINBP会返回新的权值矩阵w,阈值矢量b,网络训练的实际训练次数ep及网络训练误差平方和的行矢量tr
pause %按任意键观察误差曲线
clc
%PLOTTING THE ERROR CURVE
%==============================================
%绘制实际训练次数ep与误差tr之间的关系曲线
plottr(tr,ep);
pause %按任意键,使用网络的函数逼近功能
clc
%USING THE PATTERN ASSOCIATOR
%==============================================
%现在我们检验该网络的联想能力。输入一个初始数据0.5,看是否输出目标数据0.3960.
p=0.55;
a=simuff(p,w1,b1,'tansig',w2,b2,'purelin')
%运行结果相当接近。如将目标误差降低,会得到更满意的输出。
echo off
disp('End of BPX')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -