keras 为什么EarlyStopping和ReduceLROnPlateau中的耐心默认值如此不同?

xa9qqrwz  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(113)

Keras中的EarlyStoppingReduceLROnPlateau都有patience参数。然而,EarlyStopping的patience参数为0,而ReduceLROnPlateau的patience参数为10。假设它们都默认监控瓦尔_loss,如果ReduceLROnPlateau因为patience数太高而永远没有机会更新自己,它将如何工作?
那么,从逻辑上讲,对EarlyStopping的耐心应该总是大于ReduceLROnPlateau,对吗?

k10s72fa

k10s72fa1#

下面是一个简化的实现:

class ReduceLROnPlateau:
    def on_epoch_end(self):
        if current < self.best - self.min_delta:
            self.best = current
            self.wait = 0
            return

        self.wait += 1

        if self.wait >= self.patience:
            self.wait = 0
            self.drop_lr()

字符串
注意min_delta。它控制我们是否 * 检测到 * 新的最佳值。小的改进不会被检测到--它们会被忽略。如果我们击败了以前 * 检测到的 * 最佳值(这 * 不 * 一定是实际的最佳值!),那么我们重置wait计数器。
EarlyStopping相同。
但是,请注意不同的选择:
| | | |
| --|--|--|
| ReduceLROnPlateau个|耐心=10| min_delta=0.0001|
| EarlyStopping个|耐心=0| min_delta=0|
所以. EarlyStopping对它认为的变化要宽松得多。如果损失下降 * 非常 * 平滑但单调,当它低于min_delta持续10个epoch时,我们仍然可以看到LR下降。在实践中,损失并不是那么平滑,如果它停止单调下降,EarlyStopping将终止训练。
这就是为什么你可能应该增加它的耐心,例如patience=11。另请参阅:PyTorch的ReduceLROnPlateau默认值。PyTorch也做相对增量,而不是绝对增量。
注意:PyTorch使用完全不同的参数值和算法,因此此解释仅适用于Keras。

相关问题