генерация матрицы смешения в кератах для мультиклассовой классификации - PullRequest
0 голосов
/ 26 декабря 2018

Повышение точности до 98% с помощью модели обучения, но матрица путаницы показывает очень высокую несоответствующую классификацию.

Я работаю над мультиклассовой классификацией с использованием керас с подходом к обучению переносу на предварительно обученной модели VGG16.

Проблема состоит в том, чтобы с помощью CNN классифицировать изображения по 5 типам болезней томатов.

Существует 5 классов болезней с 6970 тренировочными изображениями и 70 тестовыми изображениями.

Модель обучения показывает 98,65%Точность при тестировании показывает точность 94%.

Но проблема в том, что когда я генерирую матрицу путаницы, она показывает очень высокую классификацию ошибок.

кто-то, пожалуйста, помогите мне, если мой код неправильный илимодель не так?Я не понимаю, дает ли моя модель правильные результаты или нет.

И если кто-то может объяснить мне, как на самом деле керасы вычисляют точность с помощью функции model.fit_generator, потому что применение общей формулы точности к матрице путаницы не дает мне таких же результатов, как рассчитывали керасы.

Для тестирования код набора данных:

test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(150, 150),
batch_size=20,
class_mode='categorical')
test_loss, test_acc = model.evaluate_generator(test_generator, steps=50)
print('test acc:', test_acc)

Я нашел код для генерации матрицы путаницы на одном из форумов;

код:

import numpy as np
from sklearn.metrics import confusion_matrix,classification_report
batch_size = 20
num_of_test_samples = 70
predictions = model.predict_generator(test_generator,  num_of_test_samples // batch_size+1)

y_pred = np.argmax(predictions, axis=1)

true_classes = test_generator.classes

class_labels = list(test_generator.class_indices.keys())   

print(class_labels)

print(confusion_matrix(test_generator.classes, y_pred))

report = classification_report(true_classes, y_pred, target_names=class_labels)
print(report)

Ниже приведены полученные результаты:

Точность тестирования:

Found 70 images belonging to 5 classes.
test acc: 0.9420454461466182

Результаты матрицы путаницы:

['TEB', 'TH', 'TLB', 'TLM', 'TSL']
[[2 3 2 4 3]
 [4 2 3 0 5]
 [3 3 3 2 3]
 [3 3 2 4 2]
 [2 2 4 4 2]]]
              precision    recall  f1-score   support

         TEB       0.14      0.14      0.14        14
          TH       0.15      0.14      0.15        14
         TLB       0.21      0.21      0.21        14
         TLM       0.29      0.29      0.29        14
         TSL       0.13      0.14      0.14        14

   micro avg       0.19      0.19      0.19        70
   macro avg       0.19      0.19      0.19        70
weighted avg       0.19      0.19      0.19        70

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Я могу опоздать на вечеринку, но, возможно, вы не обрабатываете тестовые данные так же, как обучающие.Попробуйте импортировать функцию предварительной обработки из VGG16 и добавить ее в генератор в качестве параметра (preprocessing_function).

0 голосов
/ 26 декабря 2018

Тестовые метки должны быть class_indices, а не классами

true_classes = test_generator.class_indices
...