Q1
Я обучил модель CNN и сохранил ее как model.h5
. Я пытаюсь обнаружить 3 объекта. Скажем, «кошка», «собака» и «другие». В моем тестовом наборе 300 изображений, по 100 из каждой категории. Первые 100 - это «кошка», вторые 100 - это «собака», а третьи 100 - «другое». Я использую Keras класс ImageDataGenerator
и flow_from_directory
. Вот пример кода:
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(150, 150),
batch_size=20,
class_mode='sparse',
shuffle=False)
Теперь использовать
from sklearn.metrics import confusion_matrix
cnf_matrix = confusion_matrix(y_test, y_pred)
Мне нужны y_test
и y_pred
. Я могу получить y_pred
используя следующий код:
probabilities = model.predict_generator(test_generator)
y_pred = np.argmax(probabilities, axis=1)
print (y_pred)
[0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 0 1 2 0 2 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1
0 2 0 0 0 0 1 0 0 0 0 0 0 1 0 2 0 1 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1
1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2
1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2]
Что в основном предсказывает объекты как 0,1 и 2. Теперь я знаю, что первый 100 объект (кошка) равен 0, 2-й объект 100 (собака) равен 1 и 3-й объект 100 (другой) равен 2. Должен ли я создать список вручную, используя numpy
, где первая 100 баллов равна 0, вторая 100 баллов равна 1, а третья 100 баллов равна 2, чтобы получить y_test
? Есть ли класс Keras, который может это сделать (создать y_test
)?
Q2
Как я могу увидеть неправильно обнаруженные объекты. Если вы посмотрите на print(y_pred)
, 3-й пункт равен 1, что неверно предсказано. Как можно увидеть это изображение, не заходя в мою папку «test_dir» вручную?