tf.keras 自定义回调可减少过度拟合,从而节省模型权重 IFF (val_lass <损失) & (val_loss < min_val_loss)



如何在Keras中构建自定义回调,使我在训练之外获得最佳。在ModelCheckPointEarlyStopping中,我可以停止模型并节省权重,但它大部分时间只关注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?

但我无法理解如何将其转化为有效的代码,而阅读tensorflow文档教程也对我没有帮助。

您可以在margin=0.02 的情况下尝试

class EarlyStoppingAtOverfitt(keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
if logs.get("val_loss") > logs.get("loss") + 0.02 :
self.stopped_epoch = epoch
self.model.stop_training = True

发件人:https://www.tensorflow.org/guide/keras/custom_callback

相关内容

最新更新