                  loss = np.array(loss[:-1], dtype="float32")
              else:
                  raise
  
          logger.debug("Caching session id: %s, labels: %s, loss: %s, timestamps: %s",
                       session_id, labels, loss.shape, timestamps.shape)
  
          if live_data and session_id in self._cache:
 
</s> remove         loss = np.array(loss, dtype="float32")
        timestamps = np.array(timestamps, dtype="float64")
 </s> add         try:
            loss = np.array(loss, dtype="float32")
        except ValueError as err:
            # When collecting live loss, the current batch may not be completely populated
            # Carry over the last loss to the next collection
            if "setting an array element with a sequence" in str(err):
                carry_over = loss[-1]
                logger.debug("Carrying over data: (carry_over: %s, new loss: %s)",
                             carry_over, loss[:-1])
                loss = np.array(loss[:-1], dtype="float32")
            else:
                raise </s> remove                 lbl = tag.replace("batch_", "")
 </s> add                 # tf2.3 stopped respecting loss names in tensorboard callback so rewrite
                lbl_split = tag.replace("batch_", "").replace("_loss", "").split("_")
                if lbl_split[-1] in ("a", "b"):
                    lbl = "face_{}".format(lbl_split[-1])
                else:
                    lbl = "mask_{}".format(lbl_split[-2]) </s> remove                 if tag == "batch_total":
 </s> add                 # Pre tf2.3 totals were "batch_total"
                if tag in ("batch_loss", "batch_total"):
        timestamps = np.array(timestamps, dtype="float64")
                  loss = np.array(loss[:-1], dtype="float32")
              else:
                  raise
  
        timestamps = np.array(timestamps, dtype="float64")
          logger.debug("Caching session id: %s, labels: %s, loss: %s, timestamps: %s",
                       session_id, labels, loss.shape, timestamps.shape)
  
          if live_data and session_id in self._cache:
keep keep keep add keep keep keep keep
 Update to TF2.3 (#1100)

* Minimum requirements to tf2.3.
  - Handle upgrades for Windows users with tf2.2 installed by Pip
  - Handle windows upgrade from pip tf2.2
  - Explicitly install Cuda for Conda installs

* Update tensorflow errors api reference
* Suppress AutoGraph warning messages
* Update GUI Stats to work with tf2.3
* Fix live graph for tf2.3
* DSSIMObjective - autoGraph bugfix
* Update Travis test 
lib/gui/stats.py