          self.weights = network.get_weights()  # For pingpong restore
          logger.debug("Initialized %s", self.__class__.__name__)
  
      def set_name(self):
          """ Set the network name """
          name = self.type
          if self.side:
              name += "_{}".format(self.side)
 
</s> remove         return Adam(**opt_kwargs)
 </s> add         return Adam(**opt_kwargs, cpu_mode=self.optimizer_savings) </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 
    @property
    def output_shapes(self):
        """ Return the output shapes from the stored network """
        return [K.int_shape(output) for output in self.network.outputs]

          self.weights = network.get_weights()  # For pingpong restore
          logger.debug("Initialized %s", self.__class__.__name__)
  
    @property
    def output_shapes(self):
        """ Return the output shapes from the stored network """
        return [K.int_shape(output) for output in self.network.outputs]

      def set_name(self):
          """ Set the network name """
          name = self.type
          if self.side:
              name += "_{}".format(self.side)
keep keep add 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