网络识别是出错,不知道输出向量应该如何定义,希望各位大神指导错误显示:错误使用 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