首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否只有在第一个,比方说100个时代之后,才能在Keras实现早期停止?

是否只有在第一个,比方说100个时代之后,才能在Keras实现早期停止?
EN

Stack Overflow用户
提问于 2017-09-18 20:07:56
回答 1查看 3.1K关注 0票数 5

我的拟合函数是非凸的,因此损失函数有时会在改进之前恶化。考虑到这一点,我想使用早期停止,但只在前100个或更多个时代之后。到目前为止我有这样的想法:

代码语言:javascript
复制
# 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世纪才开始早停。有什么想法吗?除早期停工外,任何其他建议也将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-19 07:25:14

如果你使用patience=100,你的训练不应该在100年代之前停止。但是,如果您希望有一个简短的patience,但也希望它稍后启动,您可以使用由colllin描述的方法。如果您想要进一步的定制,您可以在这里定义自己的回调,在这里,EarlyStopping作为父级。出于您的目的,您只需要覆盖初始化程序,on_epoch_end方法就可以找到这里了。

代码语言:javascript
复制
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)

您只需给出从要监视标准到初始化程序的最早时间,并在从父类调用函数之前检查条件。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46287403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档