首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fast.Ai EarlyStoppingCallback不工作

Fast.Ai EarlyStoppingCallback不工作
EN

Stack Overflow用户
提问于 2019-12-29 06:28:59
回答 1查看 621关注 0票数 0

代码语言:javascript
复制
callbacks = [EarlyStoppingCallback(learn, monitor='error_rate', min_delta=1e-5, patience=5)]
learn.fit_one_cycle(30, callbacks=callbacks, max_lr=slice(1e-5,1e-3))

正如您所看到的,我使用耐心=5和min_delta=1e-5,监视器=‘错误率’。

--我的理解是:如果在被监控的值上的改进小于min_delta,耐心会告诉它等待了多少个时代,在本例中是error_rate。

因此,如果我的理解是正确的,那么它就不会停止在6世纪。

所以,这是我的理解错误还是fast.ai库中的调试?

EN

回答 1

Stack Overflow用户

发布于 2019-12-29 08:04:55

它跟踪最佳错误率,并将min_delta与这个时代与该值之间的差异进行比较:

代码语言:javascript
复制
class EarlyStoppingCallback(TrackerCallback):
...
if self.operator(current - self.min_delta, self.best):
    self.best,self.wait = current,0
else:
    self.wait += 1
    if self.wait > self.patience:
        print(f'Epoch {epoch}: early stopping')
        return {"stop_training":True}
...

因此,只有在误差减少足够大的情况下,self.wait才会增加。一旦第五次发生,它就停止了。

代码语言:javascript
复制
np.greater(0.000638 - 1e-5, 0.000729)
代码语言:javascript
复制
False

但是,似乎确实存在一个问题,因为很明显,如果错误率跳得很高,我们就不希望将其分配给self.best。我相信这个回调的目的是如果错误率开始增加的话,停止训练--而现在相反。

因此,在TrackerCallback中,可能需要修改:

代码语言:javascript
复制
mode_dict['auto'] = np.less if 'loss' in self.monitor else np.greater

代码语言:javascript
复制
mode_dict['auto'] = np.less if 'loss' in self.monitor or 'error' in self.monitor else np.greater
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59517321

复制
相关文章

相似问题

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