Загрузка фактических значений классов и имен файлов

#tensorflow #machine-learning #keras #deep-learning #classification

#tensorflow #машинное обучение #keras #глубокое обучение #классификация

Вопрос:

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

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

 # -*- coding: utf-8 -*-
"""
Created on Sun Jan  3 21:21:02 2021

@author: Sam
"""

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_examples = 425
test_examples = 245
validation_examples = 245
img_height = img_width = 224
batch_size = 32
epochs = 100

model = keras.models.load_model('isic_model4/')

train_datagen = ImageDataGenerator(
    rescale = 1.0/255,
    rotation_range = 15,
    zoom_range = (0.95, 0.95),
    horizontal_flip = True,
    vertical_flip = True,
    data_format = "channels_last",
    dtype = tf.float32,
    )

validation_datagen = ImageDataGenerator(rescale=1.0/255, dtype=tf.float32)
test_datagen = ImageDataGenerator(rescale=1.0/255, dtype=tf.float32)

train_gen = train_datagen.flow_from_directory(
    "ClassifierData/Training/",
    target_size = (img_height, img_width),
    batch_size=batch_size,
    color_mode = "rgb",
    class_mode = "binary",
    shuffle = False,
    seed = 123,
    )

validation_gen = validation_datagen.flow_from_directory(
    "ClassifierData/Validation/",
    target_size = (img_height, img_width),
    batch_size=batch_size,
    color_mode = "rgb",
    class_mode = "binary",
    shuffle = False,
    seed = 123,
    )
    
test_gen = test_datagen.flow_from_directory(
    "ClassifierData/Test/",
    target_size = (img_height, img_width),
    batch_size=batch_size,
    color_mode = "rgb",
    class_mode = "binary",
    shuffle = False,
    seed = 123,
    )

METRICS = [
    keras.metrics.BinaryAccuracy(name="accuracy"),
    keras.metrics.Precision(name="precision"),
    keras.metrics.Recall(name="recall"),
    keras.metrics.AUC(name='auc'),
    ]

valpred1 = model.predict_classes(validation_gen)
 

Комментарии:

1. Вы делаете это в записной книжке Jupyter? Не могли бы вы добавить в структуру каталогов?

Ответ №1:

Вы можете получить имена и метки файлов validation_gen с помощью

 filenames=validation_gen.filenames
labels=validation_gen.labels
 

Если вы установите shuffle=False в каталоге validation_gen.flow_from_directory, генератор предоставит файлы для model.predict в том порядке, в котором они указаны в именах файлов. Вы можете использовать приведенный ниже код для генерации прогнозов и печати результатов с указанием имен файлов

 file_names=valididation_gen.filenames
labels=valididation_gen.labels
preds=model.predict(valididation_gen)
print('{0:^3s}{1:^15s}{2:^11s}{3:^16s}{4:^7s}'.format ('i', 'File Name', 'True Class', 'Predicted Class','Error' ))
for i in range(len(preds)):
    p=np.argmax(preds[i])
    if p==labels[i]:
        error='No'
    else:
        error='Yes'
    print ('{0:^3s}{1:^15s}{2:^11s}{3:^16s}{4:^7s}'.format ( str(i), file_names[i], str(labels[i]), str(p), error ))
 

вы получите печатный вывод, аналогичный этому, но с вашими собственными именами файлов

  i    File Name   True Class Predicted Class  Error 
 0 class001.jpg      0            0          No   
 1 class002.jpg      0            0          No   
 2 class003.jpg      0            0          No   
 3 class004.jpg      0            0          No   
 4 class005.jpg      0            0          No   
 5 class006.jpg      0            0          No   
 6 class007.jpg      0            0          No   
 7 class008.jpg      0            0          No   
 8 class009.jpg      0            0          No   
 9 class010.jpg      0            0          No   
10 class111.jpg      1            1          No   
11 class112.jpg      1            1          No