Получение точности, отзыва и оценки F1 за класс в Керасе - PullRequest
0 голосов
/ 27 апреля 2018

Я обучил нейронную сеть с использованием бэкэнда TensorFlow в Keras (2.1.5) и также использовал библиотеку keras-contrib (2.0.8), чтобы добавить слой CRF в качестве выхода для сети.

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

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Посмотрите на sklearn.metrics.classification_report:

from sklearn.metrics import classification_report

y_pred = model.predict(x_test)
print(classification_report(y_true, y_pred))

дает вам что-то вроде

             precision    recall  f1-score   support

    class 0       0.50      1.00      0.67         1
    class 1       0.00      0.00      0.00         1
    class 2       1.00      0.67      0.80         3

avg / total       0.70      0.60      0.61         5
0 голосов
/ 27 апреля 2018

Предположим, что у вас есть функция get_model(), которая создает точно такую ​​же модель, которую вы обучили, и путь weights_path, указывающий на файл HDF5, содержащий веса вашей модели:

model = get_model()
model.load_weights(weights_path)

Это должно правильно загрузить вашу модель. Тогда вам просто нужно определить ImageDataGenerator ваших тестовых данных и подогнать модель для получения прогнозов:

# Path to your folder testing data
testing_folder = ""
# Image size (set up the image size used for training)
img_size = 256
# Batch size (you should tune it based on your memory)
batch_size = 16

val_datagen = ImageDataGenerator(
    rescale=1. / 255)
validation_generator = val_datagen.flow_from_directory(
    testing_folder,
    target_size=(img_size, img_size),
    batch_size=batch_size,
    shuffle=False,
    class_mode='categorical')

Затем вы можете заставить модель генерировать все прогнозы для всего набора данных, используя метод model.predict_generator():

# Number of steps corresponding to an epoch
steps = 100
predictions = model.predict_generator(validation_generator, steps=steps)

И, наконец, создайте матрицу путаницы, используя метод metrics.confusion_matrix() из пакета sklearn:

val_preds = np.argmax(predictions, axis=-1)
val_trues = validation_generator.classes
cm = metrics.confusion_matrix(val_trues, val_preds)

Или получить все значения точности, отзыва и f1-оценки для всех классов, используя метод metrics.precision_recall_fscore_support() из sklearn (аргумент average=None выводит метрики для всех классов):

# label names
labels = validation_generator.class_indices.keys()
precisions, recall, f1_score, _ = metrics.precision_recall_fscore_support(val_trues, val_preds, labels=labels)

Я не проверял, но думаю, это поможет вам.

...