Matlab多层感知器问题

时间:2011-09-12 09:09:13

标签: matlab neural-network

我需要使用Matlab MLP对数据集进行分类并显示分类。

数据集看起来像

Click to view

到目前为止,我所做的是:

  1. 我创建了一个包含隐藏层(两个神经元)的神经网络 ?? 也许有人可以给我一些建议 神经元适合我的例子 )和输出层(一个 神经元)。

  2. 我使用过几种不同的学习方法,比如Delta bar Delta,反向传播(这两种方法都与-out一起使用 势头和Levenberg-Marquardt。)

  3. 这是我在Matlab中使用的代码(Levenberg-Marquardt示例)

    net = newff(minmax(Input),[2 1],{'logsig' 'logsig'},'trainlm');
    net.trainParam.epochs = 10000;
    net.trainParam.goal = 0;
    net.trainParam.lr = 0.1;
    [net tr outputs] = train(net,Input,Target);
    

    下面显示了Matlab对数据生成的隐藏神经元分类边界,我有点困惑,因为网络应该产生非线性结果,但下面的结果似乎是两条边界线是线性的。

    Click to view

    生成上图的代码是:

    figure(1)
    plotpv(Input,Target);
    hold on
    plotpc(net.IW{1},net.b{1});
    hold off
    

    我还需要绘制输出神经元的输出函数,但我仍然坚持这一步。谁能给我一些建议?

    提前致谢。

1 个答案:

答案 0 :(得分:2)

关于隐藏层中神经元的数量,对于这样一个小例子,两个绰绰有余。确定最佳状态的唯一方法是使用不同的数字进行测试。在此常见问题中,您可以找到可能有用的经验法则:http://www.faqs.org/faqs/ai-faq/neural-nets/

对于输出功能,将它分为两​​步通常很有用:

首先,给定输入向量 x ,隐藏层中神经元的输出为 y = f( x )= < strong> x ^ T w + b 其中 w 是从输入神经元到隐藏层的重量矩阵和 b 是偏向量。

其次,您必须将网络的激活函数g应用于上一步的结果向量 z = g( y

最后,输出是点积h( z )= z v + n,其中 v 是从隐藏层到输出神经元的权重向量,n是偏差。在多个输出神经元的情况下,您将为每个神经元重复此操作。

我从未使用过matlab mlp函数,因此在这种情况下我不知道如何获得权重,但我确信网络将它们存储在某个地方。编辑:搜索文档我找到了属性:

  • net.IW numLayers-by-numInputs输入权重值的单元格数组
  • net.LW numLayers-by-numLayers图层权重值的单元格数组
  • net.b numLayers-by-1单元格的偏差值数组