|
• Which training to use for Character Recognition ?
I need your help on the following codings.
This coding is used to recognize the characters (having 88 bits)( where the picture(11x8) converted to 1x88.
Which training is good for character recognition
(trainrp / traingdx or trainscg )
What are the advantages and disadvantages ?
How to set the goals and ohter training parameters ? I really dont have any idea.
Is my method of training OK ? Or, can you please suggest a better method.
Please help.
Thank you, Predictor
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
[alphabet,targets] = SHLcharrec;
%[alphabet,targets] = SHLcharset1; % character library
[alphabet1,targets1] = SHLcharset1;
[alphabet2,targets2] = SHLcharset2;
[alphabet3,targets3] = SHLcharset3;
[alphabet4,targets4] = SHLcharset4;
[alphabet5,targets5] = SHLcharset5;
[alphabet6,targets6] = SHLcharset6;
[alphabet7,targets7] = SHLcharset7;
[alphabet8,targets8] = SHLcharset8;
[alphabet9,targets9] = SHLcharset9;
[alphabet10,targets10] = SHLcharset10;
[R,Q] = size(alphabet)
[S2,Q] = size(targets);
% pre process data
% ================
[alphabet_pp,meanA,stdA]=prestd(alphabet) ;
[alphabet1,mean1,std1]=prestd(alphabet1) ;
[alphabet2,mean2,std2]=prestd(alphabet2) ;
[alphabet3,mean3,std3]=prestd(alphabet3) ;
[alphabet4,mean4,std4]=prestd(alphabet4) ;
[alphabet5,mean5,std5]=prestd(alphabet5) ;
[alphabet6,mean6,std6]=prestd(alphabet6) ;
[alphabet7,mean7,std7]=prestd(alphabet7) ;
[alphabet8,mean8,std8]=prestd(alphabet8) ;
[alphabet9,mean9,std9]=prestd(alphabet9) ;
[alphabet10,mean10,std10]=prestd(alphabet10) ;
P = alphabet_pp; % 88 rows , 35 columns
T = targets; % 35 by 35 matrixs
% DEFINING THE NETWORK
% ====================
% The character recognition network will have 10 TANSIG
% neurons in its hidden layer.
%S1 = 10;
S1 = 25;
net = newff(minmax(P),[S1 S2],{'logsig' 'logsig'},'trainscg n');
net = init(net); % weight & bias initialization
net.IW{1,1} = 1/sqrt(R) * (2*rand(size(net.IW{1,1}))-1); % R = 88 !!!
net.b{1} = 1/sqrt(R) * (2*rand(size(net.b{1}))-1);
net.LW{2,1} = 1/sqrt(S1) * (2*rand(size(net.LW{2,1}))-1);
net.b{2} = 1/sqrt(S1) * (2*rand(size(net.b{2}))-1);
% TRAINING THE NETWORK WITHOUT NOISE ( IDEAL CASE )
% =================================================
net.performFcn = 'sse'; % Sum-Squared Error performance function
net.trainParam.goal = 0.3; % % Sum-squared error goal.
net.trainParam.show = 20; % Frequency of progress displays (in epochs).
net.trainParam.epochs = 500; % Maximum number of epochs to train.
net.trainParam.mc = 0.95; % Momentum constant.
net.trainParam.lr = 0.0001 ;
[net,tr] = train(net,P,T);
save NNforCharRec net
%save NNforCharRec
% TRAINING THE NETWORK WITH NOISE ( 3 sets )
% ===============================
% A copy of the network will now be made. This copy will
% be trained with noisy examples of letters of the alphabet.
netn = net;
netn.trainParam.goal = 1e1; % Mean-squared error goal.
netn.trainParam.epochs = 500; % Maximum number of epochs to train.
% The network will be trained on 11 sets of noisy data collected from the samples.
T = [targets targets1 targets2 targets3 targets4 targets5 targets6 targets7 targets8 targets9 targets10];
for pass = 1:11
fprintf('Pass = %.0f\n',pass);
P = [alphabet_pp, alphabet1, alphabet2, alphabet3, alphabet4, alphabet5, alphabet6, alphabet7, alphabet8, alphabet9, alphabet10];
% pre processing
PN = trastd(P,meanA,stdA);
[netn,tr] = train(netn,PN,T);
end
% save NNforCharRec netn
save NNforCharRec
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
One of the samples for training ( There are another 10 more sets similar to this.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [alphabet,targets] = SHLcharrec()
% SHAHUL Character recognition problem definition
%
% [ALHABET,TARGETS] = SHLcharrec()
% Returns:
% ALPHABET - 88x36 matrix of 8x11 bit maps for each letter.
% TARGETS - 36x36 target vectors, for both characters and numbers.
% Date : 7 Disember 2004, Time : 7.41 pm
letterA = [0 0 0 1 1 0 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 0 0 1 0 0 ...
0 0 1 0 0 1 0 0 ...
0 1 1 1 1 1 1 0 ...
0 1 1 1 1 1 1 0 ...
0 1 1 1 1 1 1 0 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ]';
letterB = [1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 1 0 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 1 1 1 0 ...
1 1 1 1 1 1 0 0 ...
1 1 0 0 1 1 1 0 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 1 1 1 1 1 0 ...
1 1 1 1 1 1 0 0]';
letterC = [0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0]';
letterD = [1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 1 0 ...
1 1 0 0 0 1 1 0 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 1 1 0 ...
1 1 1 1 1 1 1 0 ...
1 1 1 1 1 1 0 0]';
letterE = [1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ]';
letterF = [1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ]';
letterG = [0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 0 0 1 1 1 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 1 1 1 1 ...
1 1 0 0 1 1 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 1 0 0 0 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0]';
letterH = [1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 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 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1]';
letterI = [0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ]';
letterJ = [0 0 0 0 0 1 1 1 ...
0 0 0 0 0 1 1 1 ...
0 0 0 0 0 1 1 1 ...
0 0 0 0 0 1 1 1 ...
0 0 0 0 0 1 1 1 ...
0 0 0 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0]';
letterK = [1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 1 1 1 0 ...
1 1 0 1 1 1 0 0 ...
1 1 1 1 1 0 0 0 ...
1 1 1 1 0 0 0 0 ...
1 1 1 1 1 0 0 0 ...
1 1 0 1 1 1 0 0 ...
1 1 0 0 1 1 1 0 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ]';
letterL = [1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ]';
letterM = [1 1 0 0 0 0 1 1 ...
1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ...
1 1 0 1 1 0 1 1 ...
1 1 0 1 1 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ]';
letterN = [1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 1 0 0 0 1 1 ...
1 1 1 1 0 0 1 1 ...
1 1 0 1 1 0 1 1 ...
1 1 0 1 1 1 1 1 ...
1 1 0 0 1 1 1 1 ...
1 1 0 0 1 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 0 1 1 ]';
%letterO = [0 0 1 1 1 1 0 0 ...
% 0 1 1 1 1 1 1 0 ...
% 1 1 1 0 0 1 1 1 ...
% 1 1 0 0 0 0 1 1 ...
% 1 1 0 0 0 0 1 1 ...
% 1 1 0 0 0 0 1 1 ...
% 1 1 0 0 0 0 1 1 ...
% 1 1 0 0 0 0 1 1 ...
% 1 1 1 0 0 1 1 1 ...
% 0 1 1 1 1 1 1 0 ...
% 0 0 1 1 1 1 0 0]';
letterP = [1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 1 0 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 1 1 1 1 1 0 ...
1 1 1 1 1 1 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ]';
letterQ = [0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 0 0 1 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 1 1 1 1 ...
1 1 0 0 1 1 1 1 ...
1 1 1 0 1 1 1 1 ...
0 1 1 1 1 1 1 1 ...
0 0 1 1 1 1 1 1 ]';
letterR = [1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 1 0 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 1 1 1 0 ...
1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 0 0 ...
1 1 0 0 1 1 1 0 ...
1 1 0 0 0 1 1 0 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ]';
letterS = [0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 1 0 0 0 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 0 0 0 1 1 1 ...
0 0 0 0 0 0 1 1 ...
1 1 1 0 0 0 1 1 ...
1 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ]';
letterT = [1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ...
0 0 1 1 1 0 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 0 1 1 1 0 0 ...
0 0 0 1 1 1 0 0 ...
0 0 0 1 1 1 0 0 ...
0 0 1 1 1 0 0 0 ...
0 0 1 1 1 0 0 0 ]';
letterU = [1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ]';
letterV = [1 1 0 0 0 0 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 0 0 1 1 0 ...
0 1 1 0 0 1 1 0 ...
0 1 1 0 0 1 1 0 ...
0 1 1 0 0 1 1 0 ...
0 0 1 0 0 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 0 1 1 0 0 0]';
letterW = [1 1 0 1 1 0 1 1 ...
1 1 0 1 1 0 1 1 ...
0 1 0 1 1 0 1 0 ...
0 1 0 1 1 0 1 0 ...
0 1 0 1 1 0 1 0 ...
0 1 1 1 1 1 1 0 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 0 0 1 0 0 ...
0 0 1 0 0 1 0 0 ...
0 0 1 0 0 1 0 0 ]';
letterX = [1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 0 0 1 1 0 ...
0 1 1 0 0 1 1 0 ...
0 0 1 1 1 1 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 1 1 1 1 0 0 ...
0 1 1 0 0 1 1 0 ...
0 1 1 0 0 1 1 0 ...
1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ]';
letterY = [1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 0 0 1 1 0 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 0 1 1 0 0 0 ]';
letterZ = [1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ...
0 0 0 0 0 0 1 1 ...
0 0 0 0 0 1 1 0 ...
0 0 0 0 1 1 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 1 1 0 0 0 0 ...
0 1 1 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ]';
number1 = [0 0 1 1 1 1 1 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 1 0 ...
0 0 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ...
0 0 1 1 1 1 0 0 ]';
number2 = [0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
0 0 0 0 1 1 1 0 ...
0 0 0 1 1 1 0 0 ...
0 1 1 1 0 0 0 0 ...
1 1 1 1 0 0 0 0 ...
1 1 1 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ]';
number3 = [ 0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 0 0 1 1 1 ...
0 0 0 0 0 1 1 1 ...
0 0 0 1 1 1 1 0 ...
0 0 0 1 1 1 0 0 ...
0 0 0 1 1 1 1 0 ...
0 0 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ]';
number4 = [ 0 0 0 0 0 1 1 0 ...
0 0 0 0 1 1 1 0 ...
0 0 0 1 1 1 1 0 ...
0 0 1 1 1 1 1 0 ...
0 1 1 1 0 1 1 0 ...
0 1 1 0 0 1 1 0 ...
1 1 0 0 0 1 1 1 ...
1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ...
0 0 0 0 1 1 1 0 ...
0 0 0 0 1 1 1 0 ]';
number5 = [ 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ...
1 1 0 0 0 0 0 0 ...
1 1 0 0 0 0 0 0 ...
1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 1 0 ...
0 0 0 0 0 1 1 1 ...
0 0 0 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ]';
number6 = [ 0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 0 0 ...
1 1 1 1 1 1 0 0 ...
1 1 1 1 1 1 1 0 ...
1 1 1 1 0 1 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ]';
number7 = [ 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 ...
0 0 0 0 1 1 1 1 ...
0 0 0 0 1 1 1 0 ...
0 0 0 1 1 1 0 0 ...
0 0 0 1 1 0 0 0 ...
0 0 1 1 1 0 0 0 ...
0 0 1 1 1 0 0 0 ...
0 1 1 1 0 0 0 0 ...
1 1 1 1 0 0 0 0 ...
1 1 1 1 0 0 0 0 ]';
number8 = [ 0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ]';
number9 = [ 0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
1 1 0 0 0 1 1 1 ...
0 1 1 1 1 1 1 1 ...
0 0 1 1 1 1 1 1 ...
0 0 0 0 0 1 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0 ]';
numberZero = [0 0 1 1 1 1 0 0 ...
0 1 1 1 1 1 1 0 ...
1 1 1 0 0 1 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 0 0 0 0 1 1 ...
1 1 1 0 0 1 1 1 ...
0 1 1 1 1 1 1 0 ...
0 0 1 1 1 1 0 0]';
alphabet = [letterA,letterB,letterC,letterD,letterE,letterF,letterG,letterH,...
letterI,letterJ,letterK,letterL,letterM,letterN,letterP,...
letterQ,letterR,letterS,letterT,letterU,letterV,letterW,letterX,...
letterY,letterZ,number1,number2,number3,number4,number5,number6,...
number7,number8,number9,numberZero];
targets = eye(35);
|