Мой преподаватель университета предоставил нам код MATLAB, который включает в себя использование ANN для прогнозирования и классификации ряда изображений в зависимости от того, присутствует ли на их изображении логотип или нет.
Я пытаюсь немного облегчить свою жизнь, написав дополнительный код, который быстро определяет уровень ложноположительных и ложноотрицательных результатов классификации ANN.
Я написал код, однако, когда я обучаю и запускаю нейронную сеть, правильные и неправильные классификации выходят примерно на ~ 30 каждый из 60. Первые 30 - это изображения логотипов, а вторые 30 - нет. -лого изображения. Это означает, что сеть имеет примерно 50% успеха, что довольно плохо. Я также прошел и проверил каждое изображение вручную, и, хотя есть некоторые ошибки, определенно нет 50:50 правильных и неправильных классификаций.
Учитывая, что код для ANN был написан моим лектором, я не думаю, что выход ANN - это проблема, а скорее моя логика в определении значений FNR и FPR. Тем не менее, я смотрел на это последние полчаса, и я не могу понять, в чем проблема. Если бы кто-то мог просмотреть это и посмотреть, есть ли у меня какие-либо логические ошибки и указать на них, я был бы признателен. Иногда помогает свежая пара глаз.
for i = 1 : number_test_images
test_image=imread(['Test_logo\' test_folder(i+2).name]);
feature_vector=get_featureVector(test_image); % function get_featureVector returns a column vector.
Y_testing = net(feature_vector'); % compute the output of the trained network
if round(Y_testing)>=.5, %logo classification
disp('Logo');
if current_image <= 30 %first 30 images are logos = correct classification
correct = correct + 1;
else current_image > 30 %last 30 images are non-logos = incorrect classification
incorrect = incorrect + 1;
end
else
disp('Non logo'); %non-logo classification
if current_image <= 30 %first 30 images are logos = incorrect classification
incorrect = incorrect + 1;
else current_image > 30 %last 30 images are non-logos = correct classification
correct = correct + 1;
end
end
end
FPR = incorrect/30;
FNR = correct/30;
error = ((FPR+FNR)/2);