              logger.debug("side: %s, output names: %s, output_shapes: %s, output_types: %s",
                           side, output_names, output_shapes, output_types)
              self._names.extend(["{}_{}{}".format(name, side,
                                                   "" if output_types.count(name) == 1
                                                   else "_{}".format(idx))
                                  for idx, name in enumerate(output_types)])
          logger.debug(self._names)
  
      def _set_loss_functions(self, output_names):
          """ Set the loss functions and their associated weights.
 
</s> remove         if not data:
            logger.debug("No data to cache")
            return
 </s> add  </s> remove             new_names.append("{}_{}".format(name, seen[name]))
 </s> add             new_names.append(f"{name}_{seen[name]}") </s> remove         vers = self._tf_version
        kwargs = dict(loss_scale="dynamic") if vers[0] == 2 and vers[1] < 4 else dict()
        logger.debug("tf version: %s, kwargs: %s", vers, kwargs)
 </s> add         kwargs = dict(loss_scale="dynamic") if get_tf_version() < 2.4 else {}
        logger.debug("tf version: %s, kwargs: %s", get_tf_version(), kwargs) </s> remove         self._tf_version = [int(i) for i in tf.__version__.split(".")[:2]]
 </s> add 
                                                 else f"_{idx}")
              logger.debug("side: %s, output names: %s, output_shapes: %s, output_types: %s",
                           side, output_names, output_shapes, output_types)
              self._names.extend(["{}_{}{}".format(name, side,
                                                   "" if output_types.count(name) == 1
                                                 else f"_{idx}")
                                  for idx, name in enumerate(output_types)])
          logger.debug(self._names)
  
      def _set_loss_functions(self, output_names):
          """ Set the loss functions and their associated weights.
keep keep keep keep 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