• Matlab实现BP网络识别字母


    训练样本空间

      每个样本使用5×5的二值矩阵表征一个字母。一共10个字母类型,分别是N,I,L,H,T,C,E,F,Z,V。每个字母9个样本。共90个。

    	N1=[1,0,0,0,1;
    	   1,0,0,0,1;
    	   1,0,1,0,1;
    	   1,0,0,1,1;
    	   1,0,0,0,1];
    	N2=[1,0,0,0,1;
    	   1,1,0,0,1;
    	   1,0,1,0,0;
    	   1,0,0,1,1;
    	   1,0,0,0,1];
    		·
    		·
    		·
    		·
    		·
    		·
    	N9=[1,0,0,0,1;
    	   1,1,0,0,1;
    	   1,0,1,1,1;
    	   1,0,0,1,1;
    	   1,0,0,0,1];
    	I1=[0,0,1,1,0;
    	    0,0,1,0,0;
    		0,0,1,0,0;
    		0,0,1,0,0;
    	    0,1,1,1,0];
    	I2=[0,1,1,1,0;
    	    0,0,1,0,0;
    		0,0,0,0,0;
    		0,0,1,0,0;
    	    0,1,1,1,0];
    			·
    			·
    			·
    			·
    			·
    			·
    	V8=[1,0,0,0,1;
    	    1,0,0,0,0;
    	    0,1,0,1,0;
    		0,1,0,1,0;
    		0,0,1,0,0];
    	V9=[1,0,1,0,1;
    	    1,0,0,0,1;
    	    0,1,0,1,0;
    		0,1,0,1,0;
    		0,0,1,0,0];
    	%训练集
    	P=[N1(1:end);N2(1:end);N3(1:end);
    	   N4(1:end);N5(1:end);N6(1:end);
    	   N7(1:end);N8(1:end);N9(1:end);
    	   I1(1:end);I2(1:end);I3(1:end);
    	   I4(1:end);I5(1:end);I6(1:end);
    	   I7(1:end);I8(1:end);I9(1:end);
    	   L1(1:end);L2(1:end);L3(1:end);
    	   L4(1:end);L5(1:end);L6(1:end);
    	   L7(1:end);L8(1:end);L9(1:end);
    	   H1(1:end);H2(1:end);H3(1:end);
    	   H4(1:end);H5(1:end);H6(1:end);
    	   H7(1:end);H8(1:end);H9(1:end);
    	   T1(1:end);T2(1:end);T3(1:end);
    	   T4(1:end);T5(1:end);T6(1:end);
    	   T7(1:end);T8(1:end);T9(1:end);
    	   C1(1:end);C2(1:end);C3(1:end);
    	   C4(1:end);C5(1:end);C6(1:end);
    	   C7(1:end);C8(1:end);C9(1:end);
    	   E1(1:end);E2(1:end);E3(1:end);
    	   E4(1:end);E5(1:end);E6(1:end);
    	   E7(1:end);E8(1:end);E9(1:end);
    	   F1(1:end);F2(1:end);F3(1:end);
    	   F4(1:end);F5(1:end);F6(1:end);
    	   F7(1:end);F8(1:end);F9(1:end);
    	   Z1(1:end);Z2(1:end);Z3(1:end);
    	   Z4(1:end);Z5(1:end);Z6(1:end);
    	   Z7(1:end);Z8(1:end);Z9(1:end);
    	   V1(1:end);V2(1:end);V3(1:end);
    	   V4(1:end);V5(1:end);V6(1:end);
    	   V7(1:end);V8(1:end);V9(1:end);]';%注意转置
    

    期望输出

    	%期望输出,每一列表示一个样本的期望输出。
    	T=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
    	   1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
    	   1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ;
    	   0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 ;
    	   ];
    

    测试样本空间

    %测试样本空间:为10个字母
    	N0=[1,0,0,0,1;
    	    1,1,0,0,1;
    	    1,0,1,0,1;
    	    1,0,0,1,1;
    	    1,0,0,0,1];
    	I0=[0,1,1,1,0;
    	    0,0,1,0,0;
    		0,0,1,0,0;
    		0,0,1,0,0;
    	    0,1,1,1,0];
    	L0=[1,0,0,0,0;
    	    1,0,0,0,0;
    		1,0,0,0,0;
    		1,0,0,0,0;
    		1,1,1,1,1];
    	H0=[1,0,0,0,1;
    	    1,0,0,0,1;
    		1,1,1,1,1;
    		1,0,0,0,1;
    		1,0,0,0,1];
    	T0=[1,1,1,1,1;
    	    0,0,1,0,0;
    		0,0,1,0,0;
    		0,0,1,0,0;
    		0,0,1,0,0];
    	C0=[1,1,1,1,1;
    	    1,0,0,0,0;
    		1,0,0,0,0;
    		1,0,0,0,0;
    		1,1,1,1,1];
    	E0=[1,1,1,1,1;
    	    1,0,0,0,0;
    		1,1,1,1,0;
    		1,0,0,0,0;
    		1,1,1,1,1];
    	F0=[1,1,1,1,0;
    	    1,0,0,0,0;
    		1,1,1,0,0;
    		1,0,0,0,0;
    		1,0,0,0,0];
    	Z0=[1,1,1,1,1;
    	    0,0,0,1,0;
    		0,0,1,0,0;
    		0,1,0,0,0;
    		1,1,1,1,1];
    	V0=[1,0,0,0,1;
    	    1,0,0,0,1;
    	    0,1,0,1,0;
    		0,1,0,1,0;
    		0,0,1,0,0];
    	%测试集
    	X=[N0(1:end);I0(1:end);L0(1:end);H0(1:end);T0(1:end);
    	   C0(1:end);E0(1:end);F0(1:end);Z0(1:end);V0(1:end);]';%注意转置
    

    参数设置与训练网络

    	%参数设置函数
    	net=newff(P,T,11);
    	net.trainParam.epochs=50;%最大迭代次数
    	net.trainParam.goal=0.000001;%计算期望与实际的差,当小于这个值时,迭代停止
    	net.trainParam.lr=0.2;%学习速率
    
    	%用训练样本集、期望输出来训练我们设置的网络
    	net=train(net,P,T);
    

    测试阶段

    	%使用sim将测试样本集X进行测试,% sim函数用于仿真一个神经网络,输出结果返回到C
    	C=sim(net,X);
    

    输出结果

      在命令窗口用:

    C(回车换行)
    

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

    	>> C
    	
    	C =
    	
    	    0.0844    0.0347    1.0807    0.9751    0.8557    0.9753    0.9901    0.8641    1.0358    1.0402
    	    1.1358    1.0816    0.0260    0.0904   -0.0034   -0.0285    0.9873    1.0561    1.0743    0.9758
    	    0.6802    1.0481   -0.0390    0.0107    1.0695    1.0152    0.0134    0.0654    0.9796    0.9731
    	   -0.2012    0.7774    0.0502    0.9262    0.0497    0.9352   -0.0690    0.7618   -0.0061    1.1026
  • 相关阅读:
    java源码ReentrantLock源码分析1
    java源码Semaphore源码分析
    java源码HashMap源码分析
    java源码LinkedHashMap类设计
    java源码HashMap类设计
    java源码ConcurrentHashMap分析1
    java源码CountDownLatch源码分析
    转linux误删文件恢复 简单
    「翻译」Redis协议 简单
    刘昕明:送给和我一样曾经浮躁过的PHP程序员 简单
  • 原文地址:https://www.cnblogs.com/d0main/p/6692662.html
Copyright © 2020-2023  润新知