tf.keras自定义回调以减少过拟合,从而保存模型权重IFF(瓦尔_lass〈loss)&(val_loss〈min_val_loss)

wmomyfyw  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(150)

如何在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 documentation tutorial没有帮助我。

huwehgph

huwehgph1#

您可以尝试将边距设置为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

相关问题