Расчет ложноположительного показателя для ANN в MATLAB (логическая ошибка) - PullRequest
0 голосов
/ 07 мая 2018

Мой преподаватель университета предоставил нам код 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);

1 Ответ

0 голосов
/ 07 мая 2018

Думаю, у вас проблема с оператором if-else, поскольку оператор current_image > 30 выполняется не как часть оценки if-else.

должно быть

if current_image <= 30 %first 30 images are logos = correct classification
            correct = correct + 1;
elseif current_image > 30 %last 30 images are non-logos = incorrect classification
            incorrect = incorrect + 1;
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...