zoukankan      html  css  js  c++  java
  • Matlab神经网络工具箱学习之二

    螃蟹的分类

    这个例子的目的是根据螃蟹的品种、背壳的长宽等等属性来判断螃蟹的性别,雄性还是雌性。

    训练数据一共有六个属性:

      species, frontallip, rearwidth, length, width and depth.

    这里每个属性所对应的是螃蟹哪一部分的真实性状并不是关键。我们关心的只是已知样本是6维的向量,输出是0/1值,

    求分类效果最好的网络模型。

    首先载入样本数据

    [x,t] = crab_dataset;
    % size(x) = [6, 200];
    % size(t) = [2, 200];

    然后初始化神经网络

    例子里使用含有一层隐含层的模型,隐含层有10个神经元。调用Matlab的patternnet()函数。

    net = patternnet(10);
    view(net)
    ----------------------------

    patternnet()函数的参数有(hiddenSizes,trainFcn,performFcn)三个。hiddenSizes默认值是10,可以用数组表示多个隐含层。trainFcn默认值是'trainscg',Performance function默认值是'crossentropy'。如果想要有两个隐含层,每层的神经元都是10个,则可以写成

    net = patternnet([10,10]);

    接下去是训练网络。把网络模型、训练样本和测试样本作为参数传入train()函数。系统自动将数据分为training和validation.

    [net,tr] = train(net,x,t);
    nntraintool
    --------------------------

    可以在窗口点击Performance或者调用PLOTPERFORM查看训练的过程。

    plotperform(tr)
    ------------------------

    测试分类器

    testX = x(:,tr.testInd);
    testT = t(:,tr.testInd);
    
    testY = net(testX);
    testIndices = vec2ind(testY);

    plotconfusion(testT,testY);

    下图表示的是分类器的效果。绿色表示分类器的分类结果和测试数据的label一致,红色表示两者结果不一致。红色区域内的百分数越小,说明分类器结果的误差越小,分类结果越好。如果误差过大,则需要增加样本进再行训练或者增加隐含层的神经元个数。

  • 相关阅读:
    Android学习——体验活动的生命周期
    Android学习——活动的生存期
    《程序员修炼之道:从小工到专家》 阅读笔记01
    开课第七周周总结
    Android学习——活动状态
    Android学习——返回栈
    Android学习——Intent传递数据
    Android学习——隐式Activity的用法
    Android学习——隐式Activity
    Android学习——使用显示Intent
  • 原文地址:https://www.cnblogs.com/naive/p/3579605.html
Copyright © 2011-2022 走看看