Краткое содержание:

Эта статья почти такая же, как и моя предыдущая, но с небольшими изменениями:



Если вы хотите просто посмотреть в блокнот или просто запустить код, нажмите здесь

Итак, начнем :)

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

Сначала нам нужно создать 3 папки (testing, train, val) в нашем наборе данных, как на скриншоте:

приблизительное количество файлов изображений в папках:
тестирование - 5%
поезд - 15%
val - 80%

Таким образом, папка «train» будет использоваться в модели обучения, а папка «val» будет использоваться для отображения результатов за эпоху. А папка «тестирование» будет использоваться только для тестирования модели на новых изображениях.

Итак, сначала нам нужно определить папку

# folders with train dir & val dir
train_dir = '/content/flowers/train/'
test_dir = '/content/flowers/val/'
testing_dir = '/content/flowers/testing/'
input_shape = (image_size, image_size, 3)

На следующем шаге нам нужно добавить генератор данных изображения для тестирования с параметром shuffle - FALSE

testing_datagen = ImageDataGenerator(rescale=1. / 255)
testing_generator = testing_datagen.flow_from_directory(
testing_dir,
target_size=(image_size, image_size),
batch_size=batch_size,
shuffle=False,
class_mode='categorical')

после обучения модели мы должны запустить следующий код, чтобы проверить результат в данных тестирования

test_score = model.evaluate_generator(testing_generator, batch_size)
print("[INFO] accuracy: {:.2f}%".format(test_score[1] * 100))
print("[INFO] Loss: ",test_score[0])

у нас должен быть такой результат:

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

#Plot the confusion matrix. Set Normalize = True/False
def plot_confusion_matrix(cm, classes, normalize=True, title='Confusion matrix', cmap=plt.cm.Blues):
    """
    This function prints and plots the confusion matrix.
    Normalization can be applied by setting `normalize=True`.
    """
    plt.figure(figsize=(20,20))
plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)
if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
        cm = np.around(cm, decimals=2)
        cm[np.isnan(cm)] = 0.0
        print("Normalized confusion matrix")
    else:
        print('Confusion matrix, without normalization')
    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")
    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
#Print the Target names
from sklearn.metrics import classification_report, confusion_matrix
import itertools 
#shuffle=False
target_names = []
for key in train_generator.class_indices:
    target_names.append(key)
# print(target_names)
#Confution Matrix
Y_pred = model.predict_generator(testing_generator)
y_pred = np.argmax(Y_pred, axis=1)
print('Confusion Matrix')
cm = confusion_matrix(testing_generator.classes, y_pred)
plot_confusion_matrix(cm, target_names, title='Confusion Matrix')
#Print Classification Report
print('Classification Report')
print(classification_report(testing_generator.classes, y_pred, target_names=target_names))

у нас должен быть такой результат:

Результат:

Мы создали матрицу путаницы с помощью matplotlib.
Если вы хотите просто посмотреть в блокнот или просто запустить код, нажмите здесь