我正在使用tensorflow 2.4.0,這里是tf.kerasEarlyStopping 回呼的代碼,特別是類的方法,在每個 epoch ( )EarlyStopping結束時呼叫:on_epoch_end
def on_epoch_end(self, epoch, logs=None):
current = self.get_monitor_value(logs).
if self.monitor_op(current - self.min_delta, self.best):
self.best = current
self.wait = 0
if self.restore_best_weights:
self.best_weights = self.model.get_weights()
else:
self.wait = 1
if self.wait >= self.patience:
self.stopped_epoch = epoch
self.model.stop_training = True
if self.restore_best_weights:
if self.verbose > 0:
print('Restoring model weights from the end of the best epoch.')
self.model.set_weights(self.best_weights)
其中,因為在我的情況下,監控的數量是val_loss:
self.monitor_op = np.less
本質上,代碼執行這個邏輯:
If (current - min_delta) < best:
best = current;
wait = 0
Otherwise:
wait = 1;
if wait >= patience:
stop training
然后,例如:
min_delta = 0.1current = 0.9best = 0.85
我們有(current - min_delta) < best,因此:
best = current (=0.9)wait = 0
因此,best現在與比前一個更差的值相關聯(0.9而不是0.85);這是 EarlyStopping 的正確/預期行為嗎?好像很奇怪
uj5u.com熱心網友回復:
如果您查看該類的init 方法,EarlyStopping您應該會看到如下內容:
if self.monitor_op == np.greater:
self.min_delta *= 1
else:
self.min_delta *= -1
因此,既然我們知道self.monitor_op = np.less,我認為min_delta在您的情況下實際上是 -0.1 并且 if 陳述句評估類似于:(0.9-(-0.1)) < 0.85。我假設你有一個EarlyStopping回呼定義為:
es = EarlyStopping(monitor='val_loss', mode='min')
還要注意min_delta實際上是什么:
被監測數量的最小變化被認為是改進,即小于 min_delta 的絕對變化,將被視為沒有改進。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422906.html
標籤:
