• Matlab实现单层感知机网络识别字母


    感知机网络的参数设置

    % 具体用法:
    % net=newp(pr,T,TF,LF);
    % 
    % pr:  pr是一个R×2的矩阵,R为感知器中输入向量的维度(本例中使用35个字符表征一个字母,那么其维度为35),每一行表示输入向量每个分量的最小值和最大值。在本例中只有0和1.
    
    % T:  T表示输出节点的个数,标量(本例使用三个输出节点的组合结果来 表示某一个类标号。实际上三个类标号至少需要两个比特位表示。)
    % TF: 传输函数,可选hardlim和hardlims,默认为hardlim,建议取hardlims
    % LF: 学习函数,可选learnp或learnpn,默认为learnp,learnpn对输入量大小的变化不明显,
    %     当输入的向量在数值的幅度上变化较大用learnpn代替learnp可以加快计算速度
    % 
    

    样本空间##

    %样本空间:每个样本使用7×5的二值矩阵来表征一个字母。
    E1=[0 0 0 0 0;
        1 1 1 0 0 ;
        1 0 0 0 0 ;
        1 1 1 0 0 ;
        1 0 0 0 0; 
        1 1 1 1 0 ;
        0 0 0 0 0];
    E2=[0 0 0 0 0;
        1 1 1 1 0 ;
        1 0 0 0 0 ;
        1 1 0 0 0 ;
        1 0 0 0 0; 
        1 1 1 1 0 ;
        0 0 0 0 0];
    E3=[0 0 0 0 0; 
        1 1 1 1 0 ;
        1 0 0 0 0 ;
        1 1 1 0 0 ;
        1 0 0 0 0; 
        1 1 1 1 0 ;
        0 0 0 0 0];
    E4=[0 0 0 0 0; 
        1 1 1 1 0 ;
        1 0 0 0 0 ;
        1 1 1 0 0 ;
        1 0 0 0 0; 
        1 1 1 0 0 ;
        0 0 0 0 0];
    L1=[0 0 0 0 0;
        0 1 0 0 0; 
        0 1 0 0 0 ;
        0 1 0 0 0 ;
        0 1 0 0 0 ;
        0 1 1 1 0; 
        0 0 0 0 0];
    L2=[0 0 0 0 0;
        0 1 0 0 0; 
        0 1 0 0 0 ;
        0 1 0 0 0 ;
        0 1 0 0 0 ;
        0 1 1 1 0; 
        0 0 0 0 0];
    L3=[0 0 0 0 0;
        0 1 0 0 0; 
        0 1 0 0 0 ;
        0 1 0 0 0 ;
        0 1 0 0 0 ;
        0 1 1 1 0; 
        0 0 0 0 0];
    L4=[0 0 0 0 0;
        0 1 0 0 0; 
        0 1 0 0 0 ;
        0 1 0 0 0 ;
        0 1 0 0 0 ;
        0 1 1 1 0; 
        0 0 0 0 0];
    I1=[0 0 0 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0 ;
        0 0 1 0 0 ;
        0 0 1 0 0; 
        0 0 0 0 0];
    I2=[0 0 0 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0 ;
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 0 0 0];
    I3=[0 0 0 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0 ;
        0 0 0 0 0];
    I4=[0 0 0 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0; 
        0 0 1 0 0 ;
        0 0 0 0 0];
    %下面将使用每个字母类型的前三个样本作为训练样本,第四个作为测试样本。
    

    训练阶段

    %选取每个字母的前三个样本作为训练样本
    p=[E1(1:end);E2(1:end);E3(1:end);I1(1:end);I2(1:end);I3(1:end);L1(1:end);L2(1:end);L3(1:end)]';%注意单引号“'”表示转置
    
    %t表示期望的输出,每一列对应于一个样本的期望,从而监督其分类标号。如第一列{1,0,1}表示字母E这个类,最后一列{0,1,0}表示字母L这个类。
     t=[1 1 1 1 1 1 0 0 0;
        0 0 0 0 0 0 1 1 1;
        1 1 1 0 0 0 0 0 0];
    
    %初始化pr为一个35行,2列的零矩阵。
    pr=zeros(35,2);
    
    %定义输入向量每个维度的最小值和最大值。
    pr(:,2)=1;
    
    %感知机网络参数设置函数
    net=newp(pr,3,'hardlim','learnp');%hardlim是二极激活函数(传递函数),learnsp是学习函数
    
    %设置最大迭代次数为20
    net.trainParam.epochs=20;
    
    %将训练集p和期望的输出(类标号)装载进设置好的网络net
    net=train(net,p,t);
    

    测试阶段

    %使用sim将测试样本进行测试,% sim函数用于仿真一个神经网络,输出结果返回到C
    C1=sim(net,E4(1:end)');
    C2=net(I4(1:end)');
    

    输出结果

      在命令窗口用:

    C1(回车换行)
    C2(回车换行)
    

    即可查看输出的分类结果:

    >> C1
    
    C1 =
    
         1
         0
         1
    
    >> C2
    
    C2 =
    
         1
         0
         0
  • 相关阅读:
    知足老师对于脚跟酸经验
    《伤寒论》理论的临床应用--朱良春
    大便秘结案
    胃脘不适论治
    杏林集叶效方
    腰痛案(知足老师论辩证之重要性)
    小儿外感治疗误区
    小儿外感咳喘案
    漫谈凭脉用药--何少奇
    咽部不适案
  • 原文地址:https://www.cnblogs.com/d0main/p/6692526.html
Copyright © 2020-2023  润新知