当前位置:文档之家› 神经网络与matlab仿真

神经网络与matlab仿真

神经网络与matlab仿真
随着技术的发展,人工神经网络在各个方面应用越来越广泛,由于matlab仿
真技术对神经网络的建模起着十分重要的作用,因此,通过讨论神经网络中基础
的一类——线性神经网络的matlab仿真,对神经网络的matlab仿真做一个基本
的了解。
1.面向matlab工具箱的神经网络设计

人工神经网络可通过硬件或软件方式来实现。硬件方式即神经计算机。目前
较常用的还是软件实现方式。已有许多公司和研究单位设计了通用的ANN程序
以方便人们使用,matlab提供的神经网络工具箱就是其重要代表。
神经网络工具箱是在matlab环境下所开发出来的许多工具箱之一,它是以人
工神经网络理论为基础,用matlab语言构造出典型神经网络的激活函数,如S
型、线性、竞争层、饱和线性等激活函数,使设计者对所选定网络输出的计算变
成对激活函数的调用。另外,根据各种典型的修正网络权值的规定,加上网络的
训练过程,用matlab编写出各种网络设计与训练所涉及的公式运算、矩阵操作
和方程求解等大部分子程序,网络的设计者可以根据自己的需要进行调用,免除
了自己编写复杂而庞大的算法程序的困扰,集中精力去思考需要解决的问题,提
高工作效率和解题质量。
目前matlab几乎完整地概括了神经网络的基本成果,对于各种网络模型,神
经网络工具箱集成了多种学习算法,为用户提供了极大的方便。
同时,matlab的其他工具箱也为我们在神经网络工具箱的基础上开发研究模
糊与神经网络的结合、神经网络的样条算法等问题提供了辅助手段

2 线性神经网络

线性神经网络是最简单的一种神经元网络,它可以由一个或多个线性神经元
构成。50年代末期提出的自适应线性元件是线性神经网络最早的典型代表。其
每个神经元的传递函数为线性函数,其输出可以取任意值。线性神经网络可以采
用Widrow-Hoff学习规则,也称为LMS算法来调整网络的权值和阈值。
2.1 线性神经网络模型
线性神经元模型的神经元有一个线性传递函数purelin,其输入输出之间是简
单的比例关系,一次对单个线性神经元,由图1可得,a=purelin(ω×p+b).因此,
线性神经网络允许输出可以取任意值,而不仅仅是0或1。

线性神经元模型
线性神经元传递函数
具有R个输入的单层(S个神经元)线性神经网络模型。

单层多输入的线性神经网络模型
2.2 线性神经网络的学习算法

Widrow-Hoff学习规则,又称为最小均方误差LMS(Least Mean Square Error)
学习算法,由Widrow-Hoff提出,属于有导师学习算法。
LMS学习规则定义如下:

22
1111()(()())mmkkmseekdkykmm




其目标是通过调节权值,使mse从误差空间的某点开始,沿着mse的斜面向下
滑行,最终使mse达到最小值。
LMS算法的实现有五个步骤:
第一步:初始化。给各个连接赋一个较小的随机值;
第二步:输入一个样本,计算连接权值的调整量:
2
()()2()ijijekekek



2
()()2()ekekekbb



1()[()(())]Rijiijijiekedkpkb





第三步:调整连接权值:
根据负梯度下降的原则,网络权值和阈值修正公式如下
(1)()2()()(1)()2()Tkkekpkbkbkek


式中η为学习率,当其取较大值时,可以加快网络的训练速度,但是如果其
值太大,会导致网络稳定性的降低和训练误差的增加。所以,为了保证网络进行
稳定的训练,学习率的值必须选择一个合适的值;
第四步:计算均方误差:

22
1111()(()())mmkkmesekdkykmm




第五步:判断误差是否为零或者是否达到预选设定的要求。如果是,则结束
算法,否则输入下一个样本,返回第二步进入下一轮求解过程。
3 线性神经网络的matlab实现
函数名称 功能
newlind 设计一个线性层
newlin 构造一个线性层
purelin 线性传递函数
dotprod 权值点积函数
netsum 网络输入求和函数
initlay 某层的初始化函数
initwb 某层的权值和阈值的初始化函数
initzero 零权值阈值初始化函数
init 一个网络的初始化函数
mae 求平均绝对误差性能函数
learnwh Widrow-hoff的学习规则
adaptwb 网络的权值阈值的自适应函数
adapt 神经网络的自适应函数
trainwb 网络的权值和阈值训练函数
train 神经网络训练函数
maxlinlr 线性层的最大学习率
errsurf 计算误差性能曲面
sim 仿真一个神经网络

下面给出一个线性神经网络的设计要求,并尝试用matlab提供的神经网络工
具函数实现。
设计一个简单的单层线性神经元,其输入和目标分别为P=[+1.0 -1.2],
T=[+0.5 +1.0]。权值和阈值的范围分别为-1~1。试用matlab实现其从输入到输出
的变化关系。

由例中的条件编写matlab源程序如下

%dlin1.m
%NEWLIND
%SIM
clf;
figure(gcf);
P=[1.0 -1.2];
T=[0.5 1.0];
w_range=-1:0.1:1;
b_range=-1:0.2:1;
ES=errsurf(P,T,w_range,b_range,'purelin');
plotes(w_range,b_range,ES);
ax=findobj(gcf.'type','axes');
pause
net=neslind(P,T);
format compact;
A=0;E=0;SSE=0;
A=sim(net,P)
E=T-A
SSE=sumsqr(E)
plotes(w_range,b_range,ES);
plotep(net.IW{1.1},net.b{1},SSE);
p=-1.2;
a=0;
a=sim(net,p) % 进行网络验证
disp('End of dline1')
执行程序,可得到线性网络求解后的误差曲面图

对此线性网络进行更多的训练以求最优解,则matlab程序更改如下。
% dlin2.m
% NEWLIN
% TRAIN
% SIM
clf;
figure(gcf);
P=[1.0 -1.2];
T=[0.5 1.0];
w_range=-1:0.2:1;
b_range=-1:0.2:1;
ES=errsurf(P,T,w_range,b_range,'purelin');
plotes(w_range,b_range,ES);
pause
maxlr=0.40*maxlinlr(P,'bias');
net=newlin([-2 2].1.[0],maxlr);
net.trainParam.goal=.001;
subplot(1,2,2);
h=text(sum(get(gca,'xlim'))*0.5,sum(get(gca,'ylim'))*0.5'*Click On ME*');
set(h,'horizontal','center','fontweight','bold');
[net.IW{1.1}net.b{1}]=ginput(1);
delete(h);
[net,tr]=train (net,P,T);
format conpact;
A=0;E=0;SSE=0;
A=sim(net,P)
E=T-A
SSE=sumsqr(E)
plotes(w_range,b_range,ES);
plotep(net.IW{1.1},net.b{1},SSE);
pause
plotperf(tr,net.trainParam.goal);
p=-1.2;
a=sim(net,P)
disp('End of dlin2')
运行程序,得到的误差曲面及误差等高线图。
参考文献
[1] 周开利,康耀红. 神经网络模型及其MATLAB仿真程序设计[M]. 北京:清
华大学出版社,2005:90-95.
[2] 闵惜琳,刘国华. 用MATLAB神经网络工具箱开发BP网络应用[J]. 计算机
应用,2001,21(8):163-164.
[3] 刘建斌. 人工神经网络在电磁建模中的应用[D]. 上海交通大学,2003:10-11.
[4] 张德丰. MATLAB神经网络应用设计[M]. 机械工业出版社,2009:7-12.

相关主题