                       "epsilon: %s, arguments: %s)", self.__class__.__name__,
                       optimizer, learning_rate, clipnorm, epsilon, arguments)
          valid_optimizers = {"adabelief": (optimizers.AdaBelief,
                                            dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                              "adam": (Adam, dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                              "nadam": (Nadam, dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                              "rms-prop": (RMSprop, dict(epsilon=epsilon))}
          self._optimizer, self._kwargs = valid_optimizers[optimizer]
  
          self._configure(learning_rate, clipnorm, arguments)
          logger.verbose("Using %s optimizer", optimizer.title())
          logger.debug("Initialized: %s", self.__class__.__name__)
 
</s> remove         self._carry_over = dict()
 </s> add         self._carry_over = {} </s> remove         self.images = dict()
 </s> add         self.images = {} </s> remove         self._funcs = dict()
 </s> add         self._funcs = {} </s> remove         self._tf_version = [int(i) for i in tf.__version__.split(".")[:2]]
 </s> add  </s> remove         if not data:
            logger.debug("No data to cache")
            return
 </s> add 
                            "adam": (optimizers.Adam,
                                     dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "nadam": (optimizers.Nadam,
                                      dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "rms-prop": (optimizers.RMSprop, dict(epsilon=epsilon))}
                       "epsilon: %s, arguments: %s)", self.__class__.__name__,
                       optimizer, learning_rate, clipnorm, epsilon, arguments)
          valid_optimizers = {"adabelief": (optimizers.AdaBelief,
                                            dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "adam": (optimizers.Adam,
                                     dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "nadam": (optimizers.Nadam,
                                      dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "rms-prop": (optimizers.RMSprop, dict(epsilon=epsilon))}
                            "adam": (optimizers.Adam,
                                     dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "nadam": (optimizers.Nadam,
                                      dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "rms-prop": (optimizers.RMSprop, dict(epsilon=epsilon))}
                            "adam": (optimizers.Adam,
                                     dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "nadam": (optimizers.Nadam,
                                      dict(beta_1=0.5, beta_2=0.99, epsilon=epsilon)),
                            "rms-prop": (optimizers.RMSprop, dict(epsilon=epsilon))}
          self._optimizer, self._kwargs = valid_optimizers[optimizer]
  
          self._configure(learning_rate, clipnorm, arguments)
          logger.verbose("Using %s optimizer", optimizer.title())
          logger.debug("Initialized: %s", self.__class__.__name__)
keep keep keep keep replace replace replace keep keep keep keep keep
 Update code to support Tensorflow versions up to 2.8 (#1213)

* Update maximum tf version in setup + requirements

* - bump max version of tf version in launcher
- standardise tf version check

* update keras get_custom_objects  for tf>2.6

* bugfix: force black text in GUI file dialogs (linux)

* dssim loss - Move to stock tf.ssim function

* Update optimizer imports for compatibility

* fix logging for tf2.8

* Fix GUI graphing for TF2.8

* update tests

* bump requirements.txt versions

* Remove limit on nvidia-ml-py

* Graphing bugfixes
  - Prevent live graph from displaying if data not yet available

* bugfix: Live graph. Collect loss labels correctly

* fix: live graph - swallow inconsistent loss errors

* Bugfix: Prevent live graph from clearing during training

* Fix graphing for AMD 
plugins/train/model/_base.py