          preds = self._get_predictions(feeds["a"], feeds["b"])
  
          for side, samples in self.images.items():
              other_side = "a" if side == "b" else "b"
              predictions = [preds["{0}_{0}".format(side)],
                             preds["{}_{}".format(other_side, side)]]
              display = self._to_full_frame(side, samples, predictions)
              headers[side] = self._get_headers(side, display[0].shape[1])
              figures[side] = np.stack([display[0], display[1], display[2], ], axis=1)
              if self.images[side][0].shape[0] % 2 == 1:
                  figures[side] = np.concatenate([figures[side],
 
</s> remove         output = ", ".join(["Loss {}: {:.5f}".format(side, side_loss)
 </s> add         output = ", ".join([f"Loss {side}: {side_loss:.5f}" </s> remove         samples = dict()
        images = dict()
        masks = dict()
 </s> add         samples = {}
        images = {}
        masks = {} </s> remove         preds = dict()
 </s> add         preds = {} </s> remove         retval = dict()
 </s> add         retval = {} </s> remove         feeds = dict()
        figures = dict()
        headers = dict()
 </s> add         feeds = {}
        figures = {}
        headers = {}
            predictions = [preds[f"{side}_{side}"],
                           preds[f"{other_side}_{side}"]]
          preds = self._get_predictions(feeds["a"], feeds["b"])
  
          for side, samples in self.images.items():
              other_side = "a" if side == "b" else "b"
            predictions = [preds[f"{side}_{side}"],
                           preds[f"{other_side}_{side}"]]
            predictions = [preds[f"{side}_{side}"],
                           preds[f"{other_side}_{side}"]]
              display = self._to_full_frame(side, samples, predictions)
              headers[side] = self._get_headers(side, display[0].shape[1])
              figures[side] = np.stack([display[0], display[1], display[2], ], axis=1)
              if self.images[side][0].shape[0] % 2 == 1:
                  figures[side] = np.concatenate([figures[side],
keep keep keep keep 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/trainer/_base.py