Scanned Image
This is the scanned image of sample handwritting. The image was cropped by number and inverted. Here is an example Number:
Code
clear all
test(1,:,:,:) = imread('samples/0-0','jpg');
test(2,:,:,:) = imread('samples/0-1','jpg');
test(3,:,:,:) = imread('samples/0-2','jpg');
test(4,:,:,:) = imread('samples/0-3','jpg');
test(5,:,:,:) = imread('samples/0-4','jpg');
test(6,:,:,:) = imread('samples/0-5','jpg');
test(7,:,:,:) = imread('samples/0-6','jpg');
test(8,:,:,:) = imread('samples/0-7','jpg');
test(9,:,:,:) = imread('samples/0-8','jpg');
test(10,:,:,:) = imread('samples/0-9','jpg');
test(11,:,:,:) = imread('samples/1-0','jpg');
test(12,:,:,:) = imread('samples/1-1','jpg');
test(13,:,:,:) = imread('samples/1-2','jpg');
test(14,:,:,:) = imread('samples/1-3','jpg');
test(15,:,:,:) = imread('samples/1-4','jpg');
test(16,:,:,:) = imread('samples/1-5','jpg');
test(17,:,:,:) = imread('samples/1-6','jpg');
test(18,:,:,:) = imread('samples/1-7','jpg');
test(19,:,:,:) = imread('samples/1-8','jpg');
test(20,:,:,:) = imread('samples/1-9','jpg');
test(21,:,:,:) = imread('samples/2-0','jpg');
test(22,:,:,:) = imread('samples/2-1','jpg');
test(23,:,:,:) = imread('samples/2-2','jpg');
test(24,:,:,:) = imread('samples/2-3','jpg');
test(25,:,:,:) = imread('samples/2-4','jpg');
test(26,:,:,:) = imread('samples/2-5','jpg');
test(27,:,:,:) = imread('samples/2-6','jpg');
test(28,:,:,:) = imread('samples/2-7','jpg');
test(29,:,:,:) = imread('samples/2-8','jpg');
test(30,:,:,:) = imread('samples/2-9','jpg');
for ii=1:30
imgs(ii,:,:) = test(ii,:,:,1);
labels(ii) = mod((ii-1),10);
end
for ii=1:30
vecs(:,ii) = reshape(imgs(ii,:,:),784,1);
samples(:,ii) = double(vecs(:,ii))./255.0;
for jj=1:784
if samples(jj,ii) > .15
samples(jj,ii) = samples(jj,ii) * 10;
elseif samples(jj,ii) < .08
samples(jj,ii) = samples(jj,ii) * .5;
end
samples(jj,ii) = samples(jj,ii) / 10;
end
end
MNIST = load('MNIST_data.mat');
train_samp = MNIST.train_samples';
temp = MNIST.train_samples_labels';
for ii=1:4000
train_labl(:,ii) = [0;0;0;0;0;0;0;0;0;0];
train_labl(temp(ii)+1,ii) = 10;
end
net = newff(train_samp,train_labl,[784,196,49,24],...
{'logsig','logsig','logsig','logsig',},'trainrp');
net.divideFcn = 'dividerand';
net.trainParam.lr = .25;
net.trainParam.epochs = 300;
net.trainParam.goal = 1e-5;
net.trainParam.show = 50;
net = train(net,train_samp,train_labl);
confusionmat = zeros(10,10);
for ii=1:30
result = sim(net,samples(:,ii));
label = labels(ii);
index = find(result==max(result));
confusionmat(index,label+1) = confusionmat(index,label+1) + 1;
end
confusionmat
sum = 0;
for ii = 1:10
sum = sum + confusionmat(ii,ii);
end
errorpct = (1-(sum/30)) * 100
confusionmat =
0 0 0 0 0 0 0 0 0 0
1 2 1 2 1 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 2 1 0 1
2 1 2 1 2 2 1 1 2 2
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 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
errorpct =
86.6667
Analysis
When we ran the simulation with the scanned numbers. Our neural net got confused. We think it is because the test sample size is too small(30) to get any accurate data. Other things that affected the accuracy of our Neural Net are the quality of the scan, and thenormalization procedures, might not have been the same that were used for the training images.