Fast.Ai EarlyStoppingCallback不起作用

时间:2019-12-29 06:28:59

标签: machine-learning pytorch fast-ai

enter image description here

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和monitor ='error_rate'

  

我的理解是:耐心告诉我们,如果监测值的改善小于min_delta,则等待多少个时期,在这种情况下为error_rate。

因此,如果我的理解是正确的,那么它将不会止于纪元6。

这是我的理解错误还是在fast.ai lib中进行调试?

1 个答案:

答案 0 :(得分:1)

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

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仅在误差减小足够大的情况下才增大。第5次发生后,它就会停止。

np.greater(0.000638 - 1e-5, 0.000729)
False

但是似乎确实存在问题,因为很明显,如果错误率跃升到很高,我们就不想将其分配给self.best。而且我相信此回调的目的是,如果错误率开始增加,则停止训练-现在它正相反。

因此在TrackerCallback中可能需要进行以下更改:

mode_dict['auto'] = np.less if 'loss' in self.monitor else np.greater

mode_dict['auto'] = np.less if 'loss' in self.monitor or 'error' in self.monitor else np.greater