          list
              List of 2 ``floats`` which is the total loss for each side
          """
          # NaN protection
          if self._config["nan_protection"] and not all(np.isfinite(val) for val in loss):
              logger.critical("NaN Detected. Loss: %s", loss)
              raise FaceswapError("A NaN was detected and you have NaN protection enabled. Training "
 
</s> remove         The losses are then into a total for each side. Loss totals are added to
 </s> add         The losses are summed into a total for each side. Loss totals are added to
        Raises
        ------
        FaceswapError
            If a NaN is detected, a :class:`FaceswapError` will be raised
          list
              List of 2 ``floats`` which is the total loss for each side
        Raises
        ------
        FaceswapError
            If a NaN is detected, a :class:`FaceswapError` will be raised
          """
          # NaN protection
          if self._config["nan_protection"] and not all(np.isfinite(val) for val in loss):
              logger.critical("NaN Detected. Loss: %s", loss)
              raise FaceswapError("A NaN was detected and you have NaN protection enabled. Training "
keep add keep keep keep keep keep
 Training updates:
  - Expose optimizer epsilon param
  - Add NaN protection
GUI - slider - add support for discreet values 
plugins/train/trainer/_base.py