                       "pingpong: %s, memory_saving_gradients: %s, predict: %s)",
                       self.__class__.__name__, model_dir, gpus, configfile, snapshot_interval,
                       no_logs, warp_to_landmarks, augment_color, no_flip, training_image_size,
                       alignments_paths, preview_scale, input_shape, encoder_dim, trainer, pingpong,
                       memory_saving_gradients, predict)
  
          self.predict = predict
          self.model_dir = model_dir
  
          self.backup = Backup(self.model_dir, self.name)
 
</s> remove                      "pingpong: %s, memory_saving_gradients: %s, predict: %s)",
 </s> add                      "pingpong: %s, memory_saving_gradients: %s, optimizer_savings: %s, "
                     "predict: %s)", </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'."
                     memory_saving_gradients, optimizer_savings, predict)
                       "pingpong: %s, memory_saving_gradients: %s, predict: %s)",
                       self.__class__.__name__, model_dir, gpus, configfile, snapshot_interval,
                       no_logs, warp_to_landmarks, augment_color, no_flip, training_image_size,
                       alignments_paths, preview_scale, input_shape, encoder_dim, trainer, pingpong,
                     memory_saving_gradients, optimizer_savings, predict)
  
          self.predict = predict
          self.model_dir = model_dir
  
          self.backup = Backup(self.model_dir, self.name)
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