数学建模培训--人工神经网络(2)

2019-03-22 23:23

常用的人工神经网络案例

1 感知器网络MatLab上机实验

例1.1

用newp函数设计一个单输入和一个神经元的感知器神经网络,输入的最小值和最大值为?0,2?。

>> net=newp([0 2],1);

可以用下面语句来观察生成了一个什么样的神经网络。

>> inputweights = net.inputWeights{1,1}

inputweights =

delays: 0

initFcn: 'initzero' learn: 1

learnFcn: 'learnp' learnParam: [] size: [1 1]

userdata: [1x1 struct] weightFcn: 'dotprod' weightParam: [1x1 struct]

从中可以看到,缺省的学习函数为learnp,网络输入给hardlim传递函数的量为数量积dotprod,即输入量和权值矩阵的乘积,然后再加上阈值。缺省的初始化函数为initzero,即权值的初始值置为0。

同样地,

>> biases = net.biases{1,1}

biases =

initFcn: 'initzero' learn: 1

learnFcn: 'learnp' learnParam: [] size: 1

userdata: [1x1 struct]

例1.2

设计一个输入为二维向量的感知器网络,其边界值已定。 >> net = newp([-2 2;-2 2],1);

和上面的例子一样,权值和阈值的初始值为0。如果不想预置为0,则必须单独生成。

例如,两个权值和阈值分别为[-1 1]和1,应用如下语句: >> net.IW{1,1}=[-1 1];

>> net.b{1,1}=[1]; 应用下面语句验证一下:

>> net.IW{1,1}

ans =

-1 1

>> net.b{1,1}

ans = 1

下面来看这个感知器网络对两个输入信号的输出如何,两个信号分别位于感知器两个边界。

第一个输入信号:

>> P1=[1;1];

>> a1=sim(net,P1)

a1 = 1

第二个输入信号:

>> P2=[1;-1]; >> a2=sim(net,P2)

a2 = 0

由此看出,输出是正确的,感知器为输入信号进行了正确的分类。

若将两个输入信号组成一个数列,则输出量也为一个数列。

>> P3={[1;1],[1;-1]}; >> a3=sim(net,P3)

a3 =

[1] [0]

例1.3

首先有newp函数生成一个神经网络。

>> net = newp([-2 2;-2 2],1); 其权值为:

>> wts = net.IW{1,1}

wts =

0 0 其阈值为:

>> bias = net.b{1,1}

bias = 0

改变权值和阈值:

>> net.IW{1,1}=[3,4]; >> net.b{1,1}=[5];

检查权值和阈值,确实已经改变了:

>> wts=net.IW{1,1}

wts =

3 4

>> bias=net.b{1,1}

bias = 5

然后应用init来复原权值和阈值。

>> net=init(net);

>> wts = net.IW{1,1}

wts =

0 0 >> bias=net.b{1,1}

bias = 0

由此可见,应用init可以复原感知器初始值。 例1.4

应用init改变网络输入的权值和阈值为随机数。

>> net.inputweights{1,1}.initFcn='rands';

>> net.biases{1,1}.initFcn='rands'; >> net=init(net);

下面验证一下权值和阈值:

>> wts = net.IW{1,1}

wts =

0.8116 -0.7460

>> bias=net.b{1,1}

bias =

0.6294 例1.5

假设一个二维向量输入的感知器神经网络,其输入和期望值样本为:

?2??1???2???1?p1???,t1?0、p2???,t2?1、p3???,t3?0、p4???,t4?1

?2???2??2??1?首先,生成一个感知器网络,然后利用train函数进行训练 >> net = newp([-2 2;-2 2],1);

>> net.trainParam.epochs=1; %设置最大迭代次数 >> p=[2 1 -2 -1;2 -2 2 1]; %样本 >> t=[0 1 0 1]; %导师信号 >> net = train(net,p,t); >> w=net.IW{1,1}

w =

-3 -1

>> b=net.b{1,1} b =

0

对输入向量进行仿真验证 >> sim(net,p)

ans =

0 0 1 1 可见,网络仿真结果没有达到期望值,通过调整训练最大次数可以看其结果。 >> net.trainParam.epochs=20; >> net = train(net,p,t); >> sim(net,p)

ans =

0 1 0 1

因此训练是成功的,训练规则具有一定的收敛性,并且能够达到精度。 例1.6

设计一个二输入感知器神经网络,将五个输入向量分为两类。

P=[-0.5 -0.5 0.5 -0.1;-0.5 0.5 -0.5 1.0] T=[1 1 0 0]

首先,应用newp构造一个神经元感知器神经网络,然后利用plotpv画出输入向量图,与期望值1对应的输入向量用“+”表示,与期望值0对应的输入向量用“o”表示。

>> P=[-0.5 -0.5 0.5 -0.1;-0.5 0.5 -0.5 1.0]; >> T=[1 1 0 0];

>> net = newp([-1 1;-1 1],1); >> plotpv(P,T);

>> p=[0.7;1.2];

>>net=train(net,P,T); >> a=sim(net,p)

a = 0

>> plotpv(p,a); >> hold on >> plotpv(P,T);


数学建模培训--人工神经网络(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于数据流分析的电控发动机故障诊断研究实验报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: