              # Workaround by simply removing it.
              # TODO: Remove this as soon it is fixed in PlaidML.
              opt_kwargs["clipnorm"] = 1.0
          logger.debug("Optimizer kwargs: %s", opt_kwargs)
          return Adam(**opt_kwargs)
  
      def loss_function(self, mask, side, initialize):
          """ Set the loss function
              Side is input so we only log once """
          if self.config.get("dssim_loss", False):
 
</s> remove                    "\n3) Try Memory Saving Gradients and/or Ping Pong Training."
 </s> add                    "\n3) Try 'Memory Saving Gradients' and/or 'Optimizer Savings' and/or 'Ping "
                   "Pong Training'." </s> remove         argument_list.append({"opts": ("-pp", "--ping-pong"),
                              "action": "store_true",
                              "dest": "pingpong",
                              "default": False,
                              "help": "Enable ping pong training. Trains one side at a time, "
                                      "switching sides at each save iteration. Training will take "
                                      "2 to 4 times longer, with about a 30%%-50%% reduction in "
                                      "VRAM useage. NB: Preview won't show until both sides have "
                                      "been trained once."})
 </s> add 
        return Adam(**opt_kwargs, cpu_mode=self.optimizer_savings)
              # Workaround by simply removing it.
              # TODO: Remove this as soon it is fixed in PlaidML.
              opt_kwargs["clipnorm"] = 1.0
          logger.debug("Optimizer kwargs: %s", opt_kwargs)
        return Adam(**opt_kwargs, cpu_mode=self.optimizer_savings)
  
      def loss_function(self, mask, side, initialize):
          """ Set the loss function
              Side is input so we only log once """
          if self.config.get("dssim_loss", False):
keep keep keep keep replace keep keep keep keep keep
 Training improvements

Add Optimizer Savings option to offload some optimizer calculations to the CPU
Add output_shape to NNMeta class for referencing when building models 
plugins/train/model/_base.py