有没有办法在第一个,比如100个时代之后实现在Keras的早期停留

时间:2017-09-18 20:07:56

标签: python neural-network keras

我的拟合函数是非凸函数,因此损失函数有时会在改进之前恶化。鉴于此,我想使用早期停止,但仅在前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个时代开始提前停止。有任何想法吗?除了提前停止之外的任何建议也值得赞赏。

1 个答案:

答案 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)

您只需将最早的纪元从您想要监控标准的地方提供给初始化程序,并在从父类调用该函数之前检查条件。