线性神经网络的应用——线性化建模(用实例来学习,适合快速入门)

一、线性化建模

线性神经网络与感知器的主要区别在于感知器的激活函数只能输出两种可能值(-1或1),而线性神经网络的输出可以取任意去啊值,其激活函数是线性函数。

由线性神经网络的输入/输出关系式A=WP+B可以看出,如果将偏差的输入1归结为P中的一个输入,可以得到增广权值,则关系式可以写成A=wp。只要不奇异,逆存在,就能求出使得关系式成立的精确值。一般情况下,线性网络能够给出满足给定误差下的网络权值,这个求解的过程就是设计一个线性网络。

下面便通过示例来演示一个神经网络系统的建模。

设计并训练一个线性网络,实现从输入向量P到输出向量T的转换。

clear all;
P=[1 2 4;2 4 8];
T=[0.5 1 -1];
net=newlin(minmax(P),1,0,0.01);
y=sim(net,P);
net=init(net);
net.trainParam.epochs=2000;
net.trainParam.goal=0.0001;
net=train(net,P,T);

训练流程图如下:

 

对网络进行仿真,仿真后的结果可以得到训练后网络的输出Y:

>> Y=sim(net,P)

Y =

    0.9286    0.3571   -0.7857

 可以看出Y与目标T的差距依然较大,即使我们已经训练了惊人的两千次。说明在这种情况下,网络是无法给出完美的解决方案的。

下面继续给出一个例子。

设计一个简单的单层线性神经元,其输入和目标分别为p=【0.5 36】;t=【15.9 12,1】。

代码如下:

clear all;
p=[0.5 36];
t=[15.9 12.1];
w_rang=-2:0.2:2;       %权值范围
b_rang=-1:0.1:1;       %阈值范围
es=errsurf(p,t,w_rang,b_rang,'purelin');     %误差曲面
plotes(w_rang,b_rang,es);
net=newlind(p,t);      %设置一个单层线性神经网络
a=0; e=0; sse=0;       %参数置零
a=sim(net,p)          %对网络进行验证
e=t-a                %求误差
sse=sumsqr(e);
plotep(net.iw{1,1},net.b{1},sse);

 运行程序可得:

 运行程序的输出如下:

a =

   15.9000   12.1000


e =

   1.0e-14 *

         0    0.1776

接着,给定如下的输入向量和输出向量T,再次利用线性网络求解两者之间的关系。

P=[1 1.5 3.0 -1.2];
T=[0.5 1.1 3.0 -1.0];
%绘制训练向量与目标向量效果图
plot(P,T,'o');                %效果如图3-5所示
axis([-1.5 3.5 -1.5 3.5]);
xlabel('训练向量P');
ylabel('目标向量T');

%创建一个线性网络,并进行训练
net=newlin(minmax(P),1,0,0.01);
net=init(net);
net.trainParam.epochs=500;
net.trainParam.goal=0.0001;
net=train(net,P,T);

运行程序可以得到如下结果:

 

由结果可以看出,网络的训练误差依然比较大,由此可以得到结论:线性网络只可以学习输入/输出向量之间的线性关系。所以,对于某些特殊的问题,网络无法得到满意的结果,只要学习率足够小,对于给定的结构,线性网络总可以得到一个接近目标的结果。 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉姆哥的小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值