
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库中的调试?
发布于 2019-12-29 08:04:55
它跟踪最佳错误率,并将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才会增加。一旦第五次发生,它就停止了。
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.greaterhttps://stackoverflow.com/questions/59517321
复制相似问题