Прежде чем перейти к ответам на эти вопросы, сделаем прогнозы для всех изображений в проверочном датасете. Настроим пайплайн:
# Переменные
IMG_WIDTH, IMG_HEIGHT = 224, 224
VALIDATION_DATA_DIR = 'data/val_data/'
VALIDATION_BATCH_SIZE = 64
# Генераторы данных
validation_datagen = ImageDataGenerator(
preprocessing_function=preprocess_input)
validation_generator = validation_datagen.flow_from_directory(
VALIDATION_DATA_DIR,
target_size=(IMG_WIDTH, IMG_HEIGHT),
batch_size=VALIDATION_BATCH_SIZE,
shuffle=False,
class_mode='categorical')
ground_truth = validation_generator.classes
Затем получим прогнозы:
predictions = model.predict_generator(validation_generator)
Чтобы упростить анализ, создадим словарь, в котором для каждого изображения сохраним индекс и его истинный класс (ожидаемый прогноз):
# prediction_table - это словарь (dict) с индексом, прогнозом и истинным
# классом (ground truth)
prediction_table = {}
for index, val in enumerate(predictions):
# получить индекс argmax
index_of_highest_probability = np.argmax(val)
value_of_highest_probability = val[index_of_highest_probability]
prediction_table[index] = [value_of_highest_probability,
index_of_highest_probability,
ground_truth[index]]
assert len(predictions) == len(ground_truth) == len(prediction_table)
Искусственный интеллект и компьютерное зрение. Реальные проекты на Python, Keras и TensorFlow
·
Анирад Коул