При использовании пользовательского обратного вызова в методе раннего останова обратный вызов не работает - PullRequest
0 голосов
/ 27 сентября 2019

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

Вот мой вывод:

class CustomCallback(keras.callbacks.Callback):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def on_epoch_end(self, epoch, logs={}):
        y_pred = self.model.predict(self.x)
        error_rate =  np.sum(self.y == y_pred)
        print(f'Error number:: {error_rate}')
        logs['error_rate'] = error_rate


early_stop = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=2)
custom_callback = CustomCallback(X_data, y_data)


model.fit(train_data, y_train, epochs=100, batch_size=32, validation_data=(cv_data, y_cv), callbacks=[early_stop, custom_callback])

Что не так в моей реализации?

1 Ответ

0 голосов
/ 27 сентября 2019

Почему бы не использовать пользовательскую метрику вместо обратного вызова?

def error_rate(y_true, y_pred):
    rate = K.cast(K.equal(y_true, y_pred), K.floatx())
    return keras.backend.sum(rate)

Вы передаете номера меток или один горячий тензор как y ??Обычно это должно быть округление в первую очередь (если вы не сделаете ничего равного)

def error_rate(y_true, y_pred):
    y_pred = K.cast(K.greater(y_pred, 0.5), K.floatx())
    ate = K.cast(K.equal(y_true, y_pred), K.floatx())
    return keras.backend.sum(rate)

Используйте это как метрику:

model.compile(......, metrics=[error_rate, ...])   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...