Я совершенно не знаком с Matlab, и это мой первый проект. Mnist имеет 60000 изображений между 0 и 9 для обучения и 1000 изображений для тестирования. я сделал попытку сделать шаблон для всего этого 10 класса (от 0 до 9), используя среднее значение. Тогда для распознавания я использую евклидово расстояние. это очень просто, но точность действительно низкая. Я не знаю, где именно моя проблема, чтобы вернуть мне этот процент точности. точность: 1,73%Точность распознавания образов Mnist
вот мой код найти 10 образец для всего нашего класса:
root = 'F:\matlab\ex1\exercise-EquivaliencOfL2DistanceAndDotProduct\dataset';
fn = strcat (root, '\MnistTrainX.mat');
load (fn);
fn = strcat (root, '\MnistTrainY.mat');
load (fn);
weights = zeros (10, 784);
b = zeros (10, 1);
im=reshape(MnistTrainX(5,:),[28 ,28]);
imshow(im,[]);
imshow(im',[]);
for c=1 : 10
idx=find(MnistTrainY == c-1);
weights (c,:)=mean(MnistTrainX(idx,:));
end
trainAccuray = ComputeInnerProductAccuracy(weights,b, MnistTrainX,MnistTrainY);
display(trainAccuray);
fn = strcat (root, '\MnistTestX.mat');
load (fn);
fn = strcat (root, '\MnistTestY.mat');
load (fn);
testAccuray = ComputeInnerProductAccuracy(weights, b, MnistTestX, MnistTestY);
display(testAccuray);
и это функция точности
function [acc]=ComputeInnerProductAccuracy(weights, b, X, Y)
n = size(X, 1);
minmat = zeros (60000, 2);
endmat = zeros (60000, 10);
m = size(X);
a=0;
for i=1 : n
for j=1 : 10
endmat(i,j)=sum((X(i,:)-(weights(j,:))).^2,2);
end
[minmat(i,1) ,minmat(i,2)]= min(endmat(i,:));
if minmat(i,2)== Y(i)
a=a+1;
end
end
acc=(a*100)/60000;
end
Вычисление среднего значения каждой цифры в качестве типичной цифры для использования и нахождения внутреннего продукта между цифрой запроса и каждой из этих репрезентативных цифр для классификации - очень плохая идея. Если вы посмотрите на каждую из отдельных цифр (т. Е. Все 1s, 2s и т. Д.), Все они очень сильно отличаются друг от друга. Поиск среднего значения всех этих цифр не является хорошим представлением о том, как каждая цифра будет выглядеть на практике. Кстати, ваш код не вычисляет внутренний продукт. Он вычисляет евклидово расстояние. – rayryeng
@rayryeng да, ваше полное право, и я это знаю, но это наше упражнение и наш учитель таким образом набрали 82% точности. Я думаю, что эта низкая точность может исходить из моей функции. – mkafiyan
Дорогой @rayryeng помните, что я прошу вас помочь мне с другой проблемой? – mkafiyan