Как я могу создать собственный обратный вызов в 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 мне тоже не помог.