我的拟合函数是非凸函数,因此损失函数有时会在改进之前恶化。鉴于此,我想使用早期停止,但仅在前100个或更多时期之后。到目前为止,我有这个:
# Early stopping
ES = [EarlyStopping(monitor='val_loss',patience=100,verbose=1,mode='auto')]
# fit model
history = model.fit(x_train, y_train, epochs=1000,batch_size=50,verbose=2,shuffle=True,validation_split=.1,callbacks=ES)
不幸的是,在10个左右的时代之后,适应性很快就会停止。我想等到第100个时代开始提前停止。有任何想法吗?除了提前停止之外的任何建议也值得赞赏。
答案 0 :(得分:3)
如果您使用patience=100
,您的训练不应该在纪元100之前停止。但是,如果您想要一个短patience
但又希望它稍后开始,您可以使用colllin描述的方法。如果您想进一步自定义,可以随时定义自己的回调,此处以EarlyStopping
作为父级。出于您的目的,您只需覆盖初始值设定项和找到的on_epoch_end
方法here:
class CustomStopper(keras.callbacks.EarlyStopping):
def __init__(self, monitor='val_loss',
min_delta=0, patience=0, verbose=0, mode='auto', start_epoch = 100): # add argument for starting epoch
super(CustomStopper, self).__init__()
self.start_epoch = start_epoch
def on_epoch_end(self, epoch, logs=None):
if epoch > self.start_epoch:
super().on_epoch_end(epoch, logs)
您只需将最早的纪元从您想要监控标准的地方提供给初始化程序,并在从父类调用该函数之前检查条件。