Краткое содержание:
Эта статья почти такая же, как и моя предыдущая, но с небольшими изменениями:
Если вы хотите просто посмотреть в блокнот или просто запустить код, нажмите здесь
Итак, начнем :)
Я просто хочу объяснить, как создать матрицу путаницы, если вы делаете модель классификации изображений.
Сначала нам нужно создать 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.
Если вы хотите просто посмотреть в блокнот или просто запустить код, нажмите здесь