数学建模培训--人工神经网络(2)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用的人工神经网络案例
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]
设计一个输入为二维向量的感知器网络,其边界值已定。
>> 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 =
由此看出,输出是正确的,感知器为输入信号进行了正确的分类。
若将两个输入信号组成一个数列,则输出量也为一个数列。
>> P3={[1;1],[1;-1]};
>> a3=sim(net,P3)
a3 =
[1] [0]
首先有newp函数生成一个神经网络。
>> net = newp([-2 2;-2 2],1);
其权值为:
>> wts = net.IW{1,1}
wts =
0 0
其阈值为:
>> bias = net.b{1,1}
bias =
改变权值和阈值:
>> 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 =
由此可见,应用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
假设一个二维向量输入的感知器神经网络,其输入和期望值样本为:
112,02p t ⎡⎤==⎢⎥⎣⎦、221,12p t ⎡⎤==⎢⎥-⎣⎦、332,02p t -⎡⎤==⎢⎥⎣⎦、441,11p t -⎡⎤==⎢⎥⎣⎦
首先,生成一个感知器网络,然后利用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 =
对输入向量进行仿真验证
>> sim(net,p)
ans =
0 0 1 1
可见,网络仿真结果没有达到期望值,通过调整训练最大次数可以看其结果。 >> net.trainParam.epochs=20;
>> net = train(net,p,t);
>> sim(net,p)
ans =