我的拟合函数是非凸的,因此损失函数有时会在改进之前恶化。考虑到这一点,我想使用早期停止,但只在前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)不幸的是,十多年后,这种适应就会提前停止。我想等到第100世纪才开始早停。有什么想法吗?除早期停工外,任何其他建议也将不胜感激。
发布于 2017-09-19 07:25:14
如果你使用patience=100,你的训练不应该在100年代之前停止。但是,如果您希望有一个简短的patience,但也希望它稍后启动,您可以使用由colllin描述的方法。如果您想要进一步的定制,您可以在这里定义自己的回调,在这里,EarlyStopping作为父级。出于您的目的,您只需要覆盖初始化程序,on_epoch_end方法就可以找到这里了。
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)您只需给出从要监视标准到初始化程序的最早时间,并在从父类调用函数之前检查条件。
https://stackoverflow.com/questions/46287403
复制相似问题