keras:实现一个自己的 callback

本文介绍了如何在Keras中实现一个自定义回调函数,用于在深度学习模型训练过程中控制训练轮次和学习率。回调功能包括在指定轮次后询问用户是否继续训练,验证误差增加时自动调整学习率,并在训练结束时加载最优权重。
摘要由CSDN通过智能技术生成

我们在一个深度模型的训练中经常会用到回调函数来对训练过程进行监测,使得训练过程更加智能化。

例如,我们经常使用的早停机制:

from tensorflow.keras.callbacks import EarlyStopping

early_stop = EarlyStopping(monitor='val_loss', 
                           mode='min', 
                           patience=10, 
                           restore_best_weights=True, 
                           verbose=1)

通过监测验证误差的变化趋势,我们可以在验证误差不再增长的时候提前结束训练。

另一个与 EarlyStopping 常常配合使用的是 ReduceLROnPlateau,当指定的训练误差或者验证误差在指定的轮次以内不再增长的时候,我们将学习率根据设置的衰减系数 factor 自动降低:

from keras.callbacks import ReduceLROnPlateau

learning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', 
                                            patience=3, 
                                            verbose=1, 
                                            factor=0.5, 
                                            min_lr=0.00001)

keras 的回调 API 包含许多不同功能用途的回调函数,通常这些回调就可以满足我们的需求了。但如果我们想要更加精细的控制训练过程,可能需要写一个自己的回调。

我们接下来就实现一个,可以在训练过程中自由控制训练轮次和学习率的回调。这个回调的功能主要是:

  • 在指定轮次之后询问使用者,是否继续训练,如果继续训练,键入继续训练的轮次,并选择保持或者改变当前学习率
  • 如果验证误差增加,则自动调整学习率,且模型加载当前最优的权重
  • 训练结束后,直接让模型加载最优权重

我们需要定义一个类,这个类继承 keras.callbacks.Callback,然后做一些初始化:

class My_ASK(keras.callbacks.Callback):
    def __init__(self, model, epochs, ask_epoch, dwell=True, factor=.4):
        super(My_ASK, self).__init__(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_57781768

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值