tf.keras Пользовательский обратный вызов для уменьшения переобучения, сохраняющего веса модели IFF (val_lass <loss) & (val_loss <min_val_loss) - PullRequest
0 голосов
/ 05 августа 2020

Как я могу создать собственный обратный вызов в Keras, который дает мне ЛУЧШЕЕ вне обучения. И в ModelCheckPoint, и в EarlyStopping я могу остановить модель и сохранить веса, но большую часть времени она смотрит только на val_loss и не учитывает переобучения во время тренировки. Я хочу создать собственный обратный вызов, который учитывает минимальную потерю проверки, которая когда-либо достигалась, текущую потерю проверки и текущую потерю обучения.

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

Я могу использовать keras.callbacks.Callback в качестве базового класса для моей модели. и получить доступ к текущей потере, текущей потере проверки как:

current_loss = logs.get("loss")
current_val_loss = logs.get("val_loss")
class NoOverfit(keras.callbacks.Callback):

    def __init__(self, patience=0):
        super(NoOverfit, self).__init__():


    def on_train_begin(self, logs=None):
        
        self.min_val_loss = np.Inf

    def on_epoch_end(self, epoch, logs=None):
        current_loss = logs.get("loss")
        current_val_loss = logs.get("val_loss")
        if np.less(current_val_loss, current_loss) & np.less(current_val_loss, self.min_val_loss):
            self.min_val_loss = current_val_loss
        
            self.best_weights = self.model.get_weights()
            # how do I save weights now?

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

...