zoukankan      html  css  js  c++  java
  • MATLAB神经网络学习(1):单层感知器

       单层感知器由一个线性组合器和一个二值阈值元件组成。

      输入是一个N维向量 x=[x1,x2,...,xn],其中每一个分量对应一个权值wi,隐含层输出叠加为一个标量值:

                          

      随后在二值阈值元件中对得到的v值进行判断,产生二值输出:

                              

      可以将数据分为两类。实际应用中,还加入偏置,值恒为1,权值为b。这时,y输出为:

                      

      单层感知器结构图:

                    

      单层感知器进行模式识别的超平面由下式决定:

                        

      当维数N=2时,输入向量可以表示为平面直角坐标系中的一个点。此时分类超平面是一条直线:

                        

      这样就可以将点沿直线划分成两类。

      

      单层感知器实例:

      

      .....重复上步骤,直到达到设定的loop值,或者误差小于设定值

    % perception_hand_un.m
    %% 清理
    clear,clc
    close all
    
    %%
    n=0.1;                  % 学习率
    w=[0,0,0]; 
    P=[ -9,  1, -12, -4,   0, 5;...
       15,  -8,   4,  5,  11, 9];
    d=[1,1,0,0,0,1];        % 期望输出
    
    P=[ones(1,6);P];
    MAX=100;                 % 最大迭代次数为100次
    %% 训练
    i=0;
    while 1
        v=w*P; 
        y=hardlim(v);       % 实际输出
        %更新
        e=(d-y);
        ee(i+1)=mae(e);
        if (ee(i+1)<0.001)   % 判断
            disp('we have got it:');
            disp(w);
            break;
        end
        % 更新权值和偏置
        w=w+n*(d-y)*P';
        
        if (i>=MAX)         % 达到最大迭代次数,退出
            disp('MAX times loop');
            disp(w);
            disp(ee(i+1));
           break; 
        end
        i= i+1;
    end
    
    
    %% 显示
    figure;
    subplot(2,1,1);         % 显示待分类的点和分类结果
    plot([  -12  -4    0],[ 4   5   11],'o');
    hold on;
    plot([-9 ,1,5],[15,-8,9],'*');
    axis([-13,6,-10,16]);
    legend('第一类','第二类');
    title('6个坐标点的二分类');
    x=-13:.2:6;
    y=x*(-w(2)/w(3))-w(1)/w(3);
    plot(x,y);
    hold off;
    
    subplot(2,1,2);         % 显示mae值的变化
    x=0:i;
    plot(x,ee,'o-');
    s=sprintf('mae的值(迭代次数:%d)', i+1);
    title(s);
    % perception_newp.m
    % 清理
    clear,clc
    close all
    
    % 创建感知器
    net=newp([-20,20;-20,20],1);
    
    %定义输入训练向量
    P=[ -9,  1, -12, -4,   0, 5;...
       15,  -8,   4,  5,  11, 9];
    % 期望输出
    T=[0,1,0,0,0,1]
    
    % 训练
    net=train(net,P,T);
    
    % 输入训练数据仿真验证
    Y=sim(net,P)
    

      

      

  • 相关阅读:
    测试Leader应该做哪些事
    软件测试基础理论详解
    测试用例设计方法--场景分析法详解
    测试用例设计方法--因果图法、判断表法详解
    测试用例设计方法--正交试验法详解
    jira创建仪表盘以及对应的数据用二维表显示
    如何对PyCharm进行设置
    selenium+python自动化测试环境安装
    卸载loadrunner
    通过抓包工具(fiddler)获取手机app/微信的网络信息
  • 原文地址:https://www.cnblogs.com/54hys/p/10164676.html
Copyright © 2011-2022 走看看