Определение пользовательской метрики с использованием обратного вызова в keras

Я хотел создать пользовательскую метрику на основе обратного вызова в keras. Во время просмотра проблем в Keras я наткнулся на следующий код для метрики f1:

class Metrics(keras.callbacks.Callback):
    def on_epoch_end(self, batch, logs={}):
        predict = np.asarray(self.model.predict(self.validation_data[0]))
        targ = self.validation_data[1]
        self.f1s=f1(targ, predict)
        return
metrics = Metrics()
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=[X_test,y_test], 
       verbose=1, callbacks=[metrics])

Но как обратный вызов возвращает точность? Я хотел реализовать unweighted recall = (recall class1 + recall class2)/2. Я могу придумать следующий код, но буду признателен за любую помощь в его завершении.

from sklearn.metrics import recall_score
class Metrics(keras.callbacks.Callback):
    def on_epoch_end(self, batch, logs={}):
        predict = np.asarray(self.model.predict(self.validation_data[0]))
        targ = self.validation_data[1]
        # --- what to store the result in?? ---
        self.XXXX=recall_score(targ, predict, average='macro')
        # we really dont need to return anything ??
        return
metrics = Metrics()
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=[X_test,y_test], 
       verbose=1, callbacks=[metrics])

person Aditya    schedule 12.02.2018    source источник