matlab手写字母识别,基于BP神经网络的手写英文字母识别

网络识别是出错,不知道输出向量应该如何定义,希望各位大神指导错误显示:错误使用 network/train (line 320)Inputs and targets have different numbers of samples.

出错 Example1Tr (line 58)

net=train(net,p,t);

下面是我的部分代码:

%Example1Tr

M=5;%人数

N=26*M;%样本数

%获取26个大写字母图像的数据

for kk=0:N-1

p1=ones(16,16);%初始化16*16的二值图像(全白)

m=strcat(int2str(kk),'.bmp');%形成文件名

x=imread(m,'bmp');%读取图像

bw=im2bw(x,0.5);%转换成二值图像数据

%用矩形框截取

[i,j]=find(bw==0);%查找像素为黑的坐标

%取边界坐标

imin=min(i);%最小行号

imax=max(i);%最大行号

jmin=min(j);%最小列号

jmax=max(j);%最大列号

bw1=bw(imin:imax,jmin:jmax);%截取

%调整比例,缩放成16*16的图像

rate=16/max(size(bw1));

bw1=imresize(bw1,rate);%会存在转换误差

%将bw1转换成标准的16*16图像p1

[i,j]=size(bw1);

i1=round((16-i)/2);

j1=round((16-j)/2);

p1(i1+1:i1+i,j1+1:j1+j)=bw1;

p1=-1.*p1+ones(16,16);

%将p1转换成输入向量

for m=0:15

p(m*16+1:(m+1)*16,kk+1)=p1(1:16,m+1);

end

end

for kk=0:N-1

for ii=0:25

t(kk+ii+1)=ii;

end

end

%设置输入向量范围

pr(1:256,1)=0;

pr(1:256,2)=1;

%创建两层BP神经网络,隐层有25个节点

net=newff(pr,[25 1],{'logsig' 'purelin'},'traingdx','learngdm');

net.trainParam.epochs=50000;%最大步长

net.trainParam.goal=0.001;%误差性能目标值

net.trainParam.show=10;%显示的间隔次数

net.trainParam.lr=0.05;%学习率

%训练神经网络

net=train(net,p,t);

%recognize

%生成向量形式

for m=0:15

q(m*16+1:(m+1)*16,1)=p1(1:16,m+1);

end

%识别

[a,Pf,Af]=sim(net,q);

a=round(a);

switch a

case{0 26 52 78 104}

ch='A';

case{1 27 53 79 105}

ch='B';

case{2 28 54 80 106}

ch='C';

case{3 29 55 81 107}

ch='D';

case{4 30 56 82 108}

ch='E';

case{5 31 57 83 109}

ch='F';

case{6 32 58 84 110}

ch='G';

case{7 33 59 85 111}

ch='H';

case{8 34 60 86 112}

ch='I';

case{9 35 61 87 113}

ch='G';

case{10 36 62 88 114}

ch='K';

case{11 37 63 89 115}

ch='L';

case{12 38 64 90 116}

ch='M';

case{13 39 65 91 117}

ch='N';

case{14 40 66 92 118}

ch='O';

case{15 41 67 93 119}

ch='P';

case{16 42 68 94 120}

ch='Q';

case{17 43 69 95 121}

ch='R';

case{18 44 70 96 122}

ch='S';

case{19 45 71 97 123}

ch='T';

case{20 46 72 98 124}

ch='U';

case{21 47 73 99 125}

ch='V';

case{22 48 74 100 126}

ch='W';

case{23 49 75 101 127}

ch='X';

case{24 50 76 102 128}

ch='Y';

case{25 51 77 103 129}

ch='Z';

end

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值