同样是廖貅武教授的软计算方法课程作业。两个小作业之一。考虑到上一个遗传算法的作业做得实在太没有含量了,我决定把这个人工神经网络做得原创性高一点。
于是,OK,我就原创一个题目吧。
问题:
给定一个超越函数在某些采样点的取值,使用人工神经网络模拟出这个超越函数。以Matlab自带的函数peaks()为例。peaks()在[0,30]的图像如下:

数据:
产生一个数组r,结构为3*300,内容为从peaks()上随机采样的300个点的x,y,z坐标。我将把x,y坐标作为输入变量,z坐标作为输出变量构建一个BP人工神经网络。结构如下:
工具:
Matlab 6.5+神经网络工具箱。
这里出现了我遇到的最大教训。教训是:装软件一定要装完整版。我开始写了个ANN的程序,结果发现运行不了,提示函数未知。我以为要加载个什么工具包,于是在整个网络上搜,搜了两小时也没搜出来,似乎所有人都直接用了,根本不存在什么加载或调用的问题。然后,我才认识到我的matlab是个不完整版,没有NN工具包……我愤而下载了一个Matlab7,决意把这可恶的6.5彻底抛弃。然后……花了一小时下载的M7居然不能装!原因未知!我只好又花了半小时下了一个matlab6.5的完整版,这才把问题解决。
细节不再赘述,直接上程序。
train.m:训练函数
load r.mat;
[P,minp,maxp,T,mint,maxt]=premnmx(r(1:2,:),r(3,:));
%建立网络
S=6; %隐含神经元数
L=1; %输出神经元数
net=newff([minp,maxp],[S,L],{’logsig’,'tansig’,'purelin’},’traincgb’,'learngdm’);
%初始化
net=init(net);
%网络训练
net.trainParam.show=20;%设置训练显示间隔次数
net.trainParam.epochs=600;%设置最大训练循环次数
net.trainParam.goal=0.0001;%设置性能目标值
net.trainParam.lr=0.1;%设置学习系数
[net,tr]=train(net,P,T);%网络训练
test.m:测试函数
te=[0 0];
for i=0:30;
for j=0:30;
tt=[i j];
te=[te;tt];
end;
end;
fi=sim(net,te’);
aa=zeros(30,30);
s=1;
for i=1:31;
for j=1:31;
aa(i,j)=fi(s);
s=s+1;
end;
end;
mesh(aa);
运算结果:
训练效果

绘制出神经网络所模拟的函数图像:

经过多次计算,发现每次计算绘出的函数图样差异较大,同时与peaks函数本身也有较大的差异。
运用人工神经网络算法对此超越函数的模拟效果较差,可能是由于多个原因。首先,对函数值的随机采样可能没有体现函数的全部特征;其次,神经网络结构较为简单,可能难以模拟一个如此复杂的函数;第三,输入变量较少,可能不适合使用神经网络进行计算。
=====================郁闷的分割线======================
就这样,我发现人工神经网络根本模拟不出这个复杂的peaks函数……可能是这神经网络的智商太低,也可能是我的智商问题……不过,反正是交作业,这也无所谓。


既然一点也看不懂 呵呵
[回复]
。你会神经网络。
真好~
[回复]