          """
          self._inputs = model.inputs
          self._set_loss_names(model.outputs)
          self._set_loss_functions(model.output_names)
          self._names.insert(0, "total")
  
 
</s> remove     if get_backend() == "amd" and isinstance(loss_func, losses.GMSDLoss):
        pytest.skip("GMSD Loss is not currently compatible with PlaidML")
 </s> add  </s> remove         self._loss_dict = dict(gmsd=losses.GMSDLoss(),
                               l_inf_norm=losses.LInfNorm(),
                               laploss=losses.LaplacianPyramidLoss(),
                               logcosh=k_losses.logcosh,
                               ms_ssim=losses.MSSIMLoss(),
                               mae=k_losses.mean_absolute_error,
                               mse=k_losses.mean_squared_error,
                               pixel_gradient_diff=losses.GradientLoss(),
                               ssim=losses.DSSIMObjective(),
                               smooth_loss=losses.GeneralizedLoss(),)
 </s> add         self._loss_dict: Dict[str, Callable] = {} </s> remove         if isinstance(loss_func, losses.GMSDLoss):
            pytest.skip("GMSD Loss is not currently compatible with PlaidML")
 </s> add         if isinstance(loss_func, losses.FocalFrequencyLoss):
            pytest.skip("FocalFrequencyLoss Loss is not currently compatible with PlaidML") </s> remove _LWIDS = ["DSSIMObjective", "GeneralizedLoss", "GMSDLoss", "GradientLoss", "LaplacianPyramidLoss",
          "LInfNorm", "logcosh", "mae", "mse", "MS-SSIM"]
 </s> add _LWIDS = ["DSSIMObjective", "FocalFrequencyLosse", "GeneralizedLoss", "GMSDLoss", "GradientLoss",
          "LaplacianPyramidLoss", "LInfNorm", "logcosh", "mae", "mse", "MS-SSIM"]
        # Some Plaid losses can't calculate the input shape at runtime, so pass these in
        kwargs = dict(input_dims=model.output_shape[0][1:3]) if get_backend() == "amd" else {}
        self._loss_dict = dict(ffl=losses.FocalFrequencyLoss(),
                               gmsd=losses.GMSDLoss(**kwargs),
                               l_inf_norm=losses.LInfNorm(),
                               laploss=losses.LaplacianPyramidLoss(),
                               logcosh=k_losses.logcosh,
                               ms_ssim=losses.MSSIMLoss(),
                               mae=k_losses.mean_absolute_error,
                               mse=k_losses.mean_squared_error,
                               pixel_gradient_diff=losses.GradientLoss(),
                               ssim=losses.DSSIMObjective(),
                               smooth_loss=losses.GeneralizedLoss(),)
          """
          self._inputs = model.inputs
        # Some Plaid losses can't calculate the input shape at runtime, so pass these in
        kwargs = dict(input_dims=model.output_shape[0][1:3]) if get_backend() == "amd" else {}
        self._loss_dict = dict(ffl=losses.FocalFrequencyLoss(),
                               gmsd=losses.GMSDLoss(**kwargs),
                               l_inf_norm=losses.LInfNorm(),
                               laploss=losses.LaplacianPyramidLoss(),
                               logcosh=k_losses.logcosh,
                               ms_ssim=losses.MSSIMLoss(),
                               mae=k_losses.mean_absolute_error,
                               mse=k_losses.mean_squared_error,
                               pixel_gradient_diff=losses.GradientLoss(),
                               ssim=losses.DSSIMObjective(),
                               smooth_loss=losses.GeneralizedLoss(),)
          self._set_loss_names(model.outputs)
          self._set_loss_functions(model.output_names)
          self._names.insert(0, "total")
  
keep add keep keep keep keep
 Loss updates
  - Split Loss to own package
  - Add Focal Frequency Loss (Nvidia only)
  - Enable GMSD for AMD 
plugins/train/model/_base/settings.py