使用MLP进行字符识别






4.43/5 (5投票s)
使用MLP神经网络进行字符识别
引言
这是一个简单的“英语字符识别”代码,使用MLP神经网络(多层感知器),性能超过80%,你可以通过设置更多的输入来改进它。
Using the Code
要使用此代码,最好了解它的工作原理。
有一些名为input
、convert
、testall
、tester
的函数。
在脚本“Main
”中,我们运行此代码。
使用函数“inputpic()
”,我们获取所有资源,这里是英文字母(i,m,n,t,v,w,y)的9*7张图片。
%% Load Images
i= inputpic();
在input函数中,我们获取每张图片并使用名为“convert
”的函数将其转换为一列二进制数据。
I1 = imread('./pics/i1.png');
I2 = imread('./pics/i2.png');
I3 = imread('./pics/i3.png');
I1 = convert(I1);
I2 = convert(I2);
I3 = convert(I3);
在input函数中
function out = convert(pic)
pic = rgb2gray(pic); %change the picture to gray picture
pic = im2bw(pic); %%change the picture to black/white picture(binery picture)
pic = pic';
pic = pic(:);
out = pic;
end
提示:我们没有从图片中提取任何特征,我们的数据是一列二进制图片数据。
“0
”表示黑色像素,“1
”表示白色像素。
在input函数的末尾,我们将所有图片数据收集在一列中,并设置在一个矩阵中。
M = [I1 I2 I3 M1 M2 M3 N1 N2 N3 T1 T2 T3 V1 V2 V3 W1 W2 W3 Y1 Y2 Y3];
现在回到Main
脚本。
t
是目标,显示哪个数字代表哪个字符。
例如,(0,0,0)
表示字符“i
”。
%% Load Images and Set Target
i= inputpic();
t = [ 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1;
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1;
0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0];
%target: i i i m m m n n n t t t v v v w w w y y y
之后,我们应该使用输入数据和目标来训练我们的网络。
我们使用多层感知器网络进行机器学习。
使用100个隐藏层,使用MLP训练数据和目标。
%% Train mlp
mlp = newff(i,t,100);
mlp = train(mlp,i,t);
测试数字“i
”作为示例
p = mlp(test);
网络给我们一个介于0
和1
之间的数字,我们需要将其归一化为0
和1
数字。
使用阈值0.5
归一化答案。
p=abs(p);
k=0;
for k=1:3
if(p(k)>0.5)
p(k)=1;
else
p(k)=0;
end
end
该网络的性能超过80%。