【问题标题】:Matlab Multilayer Perceptron QuestionMatlab多层感知器问题
【发布时间】:2011-11-15 04:20:15
【问题描述】:

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

数据集看起来像

Click to view

到目前为止我所做的是:

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

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

这是我在 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

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

提前致谢。

【问题讨论】:

    标签: matlab neural-network


    【解决方案1】:

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

    对于输出函数,将其分为两步通常很有用:

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

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

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

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

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

    【讨论】:

    • 非常感谢!您认为对两层神经元来说,logsig 是一种合适的训练方法吗?
    • 是的,逻辑函数是简单数据集的常用选择,尽管您也可以尝试 tanh。查看常见问题以获取更多详细信息(第二部分,“为什么使用激活函数?”)
    猜你喜欢
    • 2019-04-13
    • 2011-07-01
    • 2017-01-06
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2013-12-14
    相关资源
    最近更新 更多