end
for i=3:(m-1) for j=1:n
X(i,j)=X(2,j)+(X(m,j)-X(2,j))*rand; end end
X=sort(X);
for i=1:m for j=1:n
x(i,j)=X(i+1,j)-X(i,j); end end x;
for i=1:m for j=1:n
c(i,j)=X(i,j)+x(i,j)*rand; end end c;
epoch=0; TT=[]; while J>tol J=0;
epoch=epoch+1; for k=1:n t=x(:,k);
w=f(c(:,k)); %w为网络权值 y=w'*t; EK=p-y;
u=1./(abs(t'*(df(c(:,k)))))^2; %学习率u的取值 c(:,k)=c(:,k)+u*(p-y)*t'*(df(c(:,k))); J=J+sum(EK.^2)/2; end
TT(epoch)=J; J
if J<=tol break; end end y
29
p epoch
plot(1:epoch,TT(1:epoch)); %画出性能指标J与迭代次数的变化图 输出结果说明:
用复化梯形计算此积分时,需把积分区间1048576等份,才能达到给定精度.积分准确值为0.0022138479.在神经网络算法中,取神经网络结构为50 ×1(即m=50),性能指标:J?10?8,在[0,π]上有50种分法,训练样本集为{((?x1j,?x2j,?,?xmj),d)|j?1,2,?,50}.得到结果为:0.002213848889,迭代590次.
3.2 神经网络算法在数值分析方面的应用
3.2.1 模拟异或函数问题
单层感知器网络不能模拟异或函数问题,这里用二层感知器神经网络来实现.异或问题真值表见表3-1.
表3-1 异或问题的真值表
输入p1 p2
输出a
0 0 0 1 0 1 0 1 1 1 1 0
首先,要创建、训练、储存感知器神经网络,接着是仿真,我们用MATLAB程序实现.
%多层感知器神经网络仿真的MATLAB程序 clear all;
%初始化随机感知器层
pr1=[0 1;0 1]; %设置随机感知器层输入向量每个元素的值域 net1=newp(pr1,3); %定义随机感知器层
net1.inputweights{1}.initFcn='rands'; %指定随机感知器层权值初始化函数为随%
机函数
net1.biases{1}.initFcn='rands'; %指定随机感知器层阀值初始化函数为随机函数 net1=init(net1); %初始化随机感知器层 iw1=net1.IW{1} %随机感知器层的权值向量 b1=net1.b{1} %随机感知器层的阀值向量
%随机感知器层仿真
p1=[0 0;0 1; 1 0;1 1]'; %训练样本值
[a1 pf]=sim(net1,p1); %随机感知器层仿真
%初始化第二感知器层
pr2=[0 1;0 1;0 1]; %设置第二感知器层输入向量每个元素的值域 net2=newp(pr2,1);
30
%训练第二感知器层
net2.trainParam.epochs=10; net2.trainParam.show=1;
p2=ones(3,4); %初始化第二感知器层的输入向量
p2=p2.*a1; %随机感知器层的仿真输出结果作为第二感知器层的输入向量 t2=[0 1 1 0]; %第二感知器层的目标向量 [net2,tr2]=train(net2,p2,t2); %训练第二感知器层
epoch2=tr2.epoch %输出训练过程经过的每一步长 perf2=tr2.perf %输出每一步训练结果的误差 iw2=net2.IW{1} %第二感知器层的权值向量 b2=net2.b{1} %第二感知器层的阀值向量
%存储训练后的网格 save net34 net1 net2
因为随机感知器的输出是随机的,所以整个网络可能达到训练误差指标,也可能达不到训练误差指标.因此,当达不到训练误差指标时,需要从新对感知器层的权值和阀值进行初始化赋值,在本例中,是通过将其初始化函数设置为随机函数,然后用intt函数重新初始化来实现的.该程序可能一次运行不到设计的限制,需要反复运行,直至达到要求为止.正因为如此,每次训练的结果也不尽相同.
其中达到训练误差指标的一种运行结果如下: iw1 =
-0.8379 -0.3614 0.7022 -0.2502 0.1241 0.7356 b1 =
0.6954 -0.5815 -0.0898
TRAINC, Epoch 0/10 TRAINC, Epoch 1/10 TRAINC, Epoch 2/10 TRAINC, Epoch 3/10 TRAINC, Epoch 4/10 TRAINC, Epoch 5/10 TRAINC, Epoch 6/10 TRAINC, Epoch 7/10 TRAINC, Epoch 8/10
TRAINC, Performance goal met.
epoch2 =
0 1 2 3 4 5 6 7 8 perf2 =
0.5000 0.7500 0.5000 0.7500 0.5000 1.0000 0.7500
0.5000 0
31
iw2 =
2 2 1 b2 = -3
训练误差性能曲线如图3-8所示. clear all
%加载训练后的网格 load net34 net1 net2
%随机感知器层仿真
p1=[0 0;0 1;1 0;1 1]'; %随机感知器输入向量 a1=sim(net1,p1);
%输出感知器层仿真,并输出仿真结果
p2=ones(3,4); %初始化第二感知器层的输入向量 p2=p2.*a1;
a2=sim(net2,p2)
a2 =
0 1 1 0
可以看出,所设计的网格可以正确模拟“异或”函数的功能.
Performance is 0, Goal is 010.90.8Training-Blue Goal-Black0.70.60.50.40.30.20.10012348 Epochs5678图3-8 训练误差性能曲线
3.2.2 基于神经网络的数字信号处理分析
早期的数字信号处理和图像处理主要以线性滤波器为主要处理手段.线性滤波器由
32