Я построил модель с использованием функции извлечения и точной настройки VGG16. При установке точность validation_generator очень высока. Однако, когда я создаю матрицу путаницы, она не совпадает с установленной моделью.
Здесь вы можете увидеть некоторые важные коды:
validation_generator = test_datagen.flow_from_directory(
'data/valid',
target_size=(240, 240),
batch_size=batch_size,
class_mode='categorical')
history = model.fit_generator(
train_generator,
#steps_per_epoch=100,
epochs=30,
validation_data=validation_generator,
validation_steps=50)
Подгонка вывода модели, только что скопировал последние 3 эпохи.
...
Epoch 28/30
120/120 [==============================] - 70s 580ms/step - loss: 0.0767 - acc: 0.9764 - val_loss: 0.4436 - val_acc: 0.9309
Epoch 29/30
120/120 [==============================] - 70s 587ms/step - loss: 0.0730 - acc: 0.9783 - val_loss: 0.3170 - val_acc: 0.9207
Epoch 30/30
120/120 [==============================] - 70s 586ms/step - loss: 0.0828 - acc: 0.9717 - val_loss: 0.5362 - val_acc: 0.9022
Я думаю, что проблема заключается в создании матрицы путаницы с использованием validation_generator. Вот код, который я использовал для:
y_pred = model.predict_generator(validation_generator)
y_pred = y_pred.argmax(-1)
con_mat = tf.math.confusion_matrix(validation_labels.argmax(-1), y_pred)
con_mat = np.array(con_mat)
plot_confusion_matrix(cm = con_mat, classes = train_generator.class_indices.keys(), normalize = False)
Вывод (матрица неправильной путаницы):
Примечание: предположим, что функция plot_confusion_matrix работает успешно. Поскольку я использовал его раньше, когда ie извлекал функции построения без увеличения данных, он работал хорошо.