Сообщать о метриках оценки модели Keras каждые 10 эпох? - PullRequest
0 голосов
/ 28 мая 2018

Я хотел бы знать специфику и чувствительность моей модели.В настоящее время я оцениваю модель после завершения всех эпох:

from sklearn.metrics import confusion_matrix

predictions = model.predict(x_test)
y_test = np.argmax(y_test, axis=-1)
predictions = np.argmax(predictions, axis=-1)
c = confusion_matrix(y_test, predictions)
print('Confusion matrix:\n', c)
print('sensitivity', c[0, 0] / (c[0, 1] + c[0, 0]))
print('specificity', c[1, 1] / (c[1, 1] + c[1, 0]))

Недостаток этого подхода в том, что я получаю результат, который мне небезразличен только после окончания обучения.Предпочел бы получать метрики каждые 10 эпох или около того.

Кстати: пробовал с metrics=[] здесь .Возможно, обратный вызов это путь?

1 Ответ

0 голосов
/ 28 мая 2018

Пользовательский Обратный вызов будет хорошим решением, дающим вам достаточный контроль над процедурой обучения.Что-то вроде:

class SensitivitySpecificityCallback(Callback):
    def on_epoch_end(self, epoch, logs=None):
        if epoch % 10 == 1:
            x_test = self.validation_data[0]
            y_test = self.validation_data[1]
            # x_test, y_test = self.validation_data
            predictions = self.model.predict(x_test)
            y_test = np.argmax(y_test, axis=-1)
            predictions = np.argmax(predictions, axis=-1)
            c = confusion_matrix(y_test, predictions)

            print('Confusion matrix:\n', c)
            print('sensitivity', c[0, 0] / (c[0, 1] + c[0, 0]))
            print('specificity', c[1, 1] / (c[1, 1] + c[1, 0]))

, где epoch - номер эпохи, а logs содержат обычные метрики + потери модели поезда.

Затем запустите:

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          shuffle='batch',
          validation_data=(x_test, y_test),
          callbacks=[SensitivitySpecificityCallback()])

ПРИМЕЧАНИЕ: если вам не нравится, как ваша модель тренируется на основе ваших метрик, вы можете сократить тренировку с помощью:

self.model.stop_training = True

, который остановит обучение для вас.

...