From 5fb52ecd7b1ee776929fd72b4653e08d0f53d9fd Mon Sep 17 00:00:00 2001
From: Dennis Noll <dennis.noll@rwth-aachen.de>
Date: Tue, 9 Feb 2021 08:08:52 +0100
Subject: [PATCH] [keras] EarlyStopping: now includes stoptime

---
 keras.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/keras.py b/keras.py
index 129544e..ce2e895 100644
--- a/keras.py
+++ b/keras.py
@@ -3,6 +3,7 @@ import gc
 from collections import OrderedDict, defaultdict
 import fnmatch
 import math
+import datetime
 
 import numpy as np
 import tensorflow as tf
@@ -836,7 +837,8 @@ class ReduceLROnPlateau(ScaleOnPlateau):
 
 
 class EarlyStopping(PatientTracker):
-    def __init__(self, restore_best_weights=False, verbose=0, do_stop=None, **kwargs):
+    def __init__(self, runtime=None, restore_best_weights=False, verbose=0, do_stop=None, **kwargs):
+        stop_time = datetime.datetime.now() + datetime.timedelta(**runtime) if runtime else None
         pin(locals(), kwargs)
         super(EarlyStopping, self).__init__(**kwargs)
 
@@ -854,7 +856,9 @@ class EarlyStopping(PatientTracker):
             if self.restore_best_weights:
                 self.best_weights = self.model.get_weights()
                 self.best_epoch = epoch
-        elif action == "good":
+        elif action == "good" or (
+            (self.stop_time is not None) and (datetime.datetime.now() > self.stop_time)
+        ):
             self.stopped_epoch = epoch
             self.model.stop_training = True
             if self.restore_best_weights and self.best_weights is not None:
-- 
GitLab