  import keras
  from keras import losses
  from keras import backend as K
  from keras.models import load_model, Model
  from keras.optimizers import Adam
  from keras.utils import get_custom_objects, multi_gpu_model
  
  from lib import Serializer
  from lib.model.backup_restore import Backup
  from lib.model.losses import DSSIMObjective, PenalizedLoss
 
</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         return Adam(**opt_kwargs)
 </s> add         return Adam(**opt_kwargs, cpu_mode=self.optimizer_savings)
  import keras
  from keras import losses
  from keras import backend as K
  from keras.models import load_model, Model

  from keras.utils import get_custom_objects, multi_gpu_model
  
  from lib import Serializer
  from lib.model.backup_restore import Backup
  from lib.model.losses import DSSIMObjective, PenalizedLoss
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