Вы можете определить пользовательскую метрику, которая вызывает тензор потока для вычисления AUROC следующим образом:
def as_keras_metric(method):
import functools
from keras import backend as K
import tensorflow as tf
@functools.wraps(method)
def wrapper(self, args, **kwargs):
""" Wrapper for turning tensorflow metrics into keras metrics """
value, update_op = method(self, args, **kwargs)
K.get_session().run(tf.local_variables_initializer())
with tf.control_dependencies([update_op]):
value = tf.identity(value)
return value
return wrapper
@as_keras_metric
def AUROC(y_true, y_pred, curve='ROC'):
return tf.metrics.auc(y_true, y_pred, curve=curve)
Затем вам нужно скомпилировать вашу модель с этим показателем:
model.compile(loss=train_loss, optimizer='adam', metrics=['accuracy',AUROC])
Наконец: проверьте модель следующим образом:
model_checkpoint = keras.callbacks.ModelCheckpoint(path_to_save_model, monitor='val_AUROC',
verbose=0, save_best_only=True,
save_weights_only=False, mode='auto', period=1)
Будьте осторожны: я считаю, что валидация AUROC рассчитывается по партиям и усредняется; поэтому может дать некоторые ошибки с контрольной точки. Хорошей идеей может быть проверка после завершения обучения модели того, что AUROC прогнозов обученной модели (вычисленный с помощью sklearn.metrics) соответствует тому, что сообщает Tensorflow во время обучения и контрольной точки