Мне кажется, что у меня есть две разные точности с помощью pred_generator и Assessment_generator.
Я обучил модель с 5 классами с трансферным обучением. Для этого я использовал классификацию с несколькими метками с:
- на основе vgg16, который предварительно обучен на imag enet
- Активация: sigmoid
- функция потерь: binary_crossentropy
- метри c: точность
Мои результаты:
Assessment_generator:
test_a cc = 0,942
Я извлекаю матрицу путаницы на основе результатов 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))
Спасибо за вашу помощь!