gpt4 book ai didi

keras - 在培训期间更改keras中的优化器

转载 作者:行者123 更新时间:2023-12-04 02:51:42 24 4
gpt4 key购买 nike

我正在使用nadam优化器开发模型。我想知道如果在两个时期内验证损失没有减少,是否有办法在训练期间切换到sgd

最佳答案

您可以创建一个EarlyStopping回调将停止训练,在此回调中,您将创建一个函数来更改优化器并再次适合。

以下回调将监视验证损失(val_loss),并在两个时期(patience)之后停止训练,而不会使改善大于min_delta

min_delta = 0.000000000001

stopper = EarlyStopping(monitor='val_loss',min_delta=min_delta,patience=2)


但是,要在培训结束后添加额外的操作,我们可以扩展此回调并更改 on_train_end方法:

class OptimizerChanger(EarlyStopping):

def __init__(self, on_train_end, **kwargs):

self.do_on_train_end = on_train_end
super(OptimizerChanger,self).__init__(**kwargs)

def on_train_end(self, logs=None):
super(OptimizerChanger,self).on_train_end(self,logs)
self.do_on_train_end()


对于在模型结束训练时要调用的自定义函数:

def do_after_training():

#warining, this creates a new optimizer and,
#at the beginning, it might give you a worse training performance than before
model.compile(optimizer = 'SGD', loss=...., metrics = ...)
model.fit(.....)


现在让我们使用回调:

changer = OptimizerChanger(on_train_end= do_after_training, 
monitor='val_loss',
min_delta=min_delta,
patience=2)

model.fit(..., ..., callbacks = [changer])

关于keras - 在培训期间更改keras中的优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47626254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com