Keras: eval_generator и pred_generator имеют разные результаты - PullRequest
0 голосов
/ 08 мая 2020

Мне кажется, что у меня есть две разные точности с помощью pred_generator и Assessment_generator.

Я обучил модель с 5 классами с трансферным обучением. Для этого я использовал классификацию с несколькими метками с:

  • на основе vgg16, который предварительно обучен на imag enet
  • Активация: sigmoid
  • функция потерь: binary_crossentropy
  • метри c: точность

Мои результаты:

  1. Assessment_generator:

    test_a cc = 0,942

  2. Я извлекаю матрицу путаницы на основе результатов pred_generator, которая похожа на это:

[20   0   2   0   3]  
[ 0  20   0   1   0]
[ 2   1  21   2   0] 
[ 0   0   1  21   0]  
[ 4   0   0   0  21]

Это дает точность 103/119 = 0,86

Я использовал следующий код для тестирования модели:

    model = load_model(model_path)

    test_datagen = ImageDataGenerator(preprocessing_function=vgg16.preprocess_input)
    test_generator = test_datagen.flow_from_directory(
        image_dir_path,
        target_size=IMAGE_DIM,
        color_mode='rgb',
        batch_size=16,
        class_mode='categorical',
        shuffle=False
    )
    steps_test = test_generator.n // test_generator.batch_size + 1
    test_generator.reset()
    test_loss, test_acc = model.evaluate_generator(test_generator, steps=steps_test, workers=1,
                                                            use_multiprocessing=False)
    print('Test_Acc:', test_acc)
    print('Test_Loss:', test_loss)

    test_generator.reset()
    y_pred = model.predict_generator(test_generator, steps=steps_test, workers=1, use_multiprocessing=False)
    y_pred = numpy.argmax(y_pred, axis=1)
    print('Confusion Matrix')
    print(confusion_matrix(test_generator.classes, y_pred))
    print('Classification Report')
    target_names = ["a","b","c","d","e"]
    print(classification_report(test_generator.classes, y_pred, target_names=target_names))

Спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...