• 同样是廖貅武教授的软计算方法课程作业。两个小作业之一。考虑到上一个遗传算法的作业做得实在太没有含量了,我决定把这个人工神经网络做得原创性高一点。

    于是,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函数……可能是这神经网络的智商太低,也可能是我的智商问题……不过,反正是交作业,这也无所谓。


    2,618 阅读
    上一篇« 马王草莓记


    分享到饭否   

    本日志发表于星期三, 四月 29th, 2009 at 15:24,属于分类STUDYTECHN
    你可以通过RSS 2.0对这篇日志进行回复。
    你可以回复日志, 或者从自己的页面引用
  • 2 评论

    看看有啥想说的。

    1. Posted on 四月 29th

      既然一点也看不懂 呵呵

      [回复]

    2. sjp
      Posted on 五月 2nd

      。你会神经网络。
      真好~

      [回复]

  • 发表评论

    告诉我你在想什么。

  • Name:

    Email (required):

    Website:

    Message: