      BATCH_SIZE = 64
  
      def __init__(self, model, fn_A, fn_B):
          self.model = model
          self.images_A = minibatchAB(fn_A, self.BATCH_SIZE)
          self.images_B = minibatchAB(fn_B, self.BATCH_SIZE)
  
      def train_one_step(self, iter, viewer):
          epoch, warped_A, target_A = next(self.images_A)
          epoch, warped_B, target_B = next(self.images_B)
  
 
</s> remove     BATCH_SIZE = 64

    def __init__(self, model, fn_A, fn_B):
 </s> add     def __init__(self, model, fn_A, fn_B, batch_size=64):
        self.batch_size = batch_size
 </s> remove         print("[%s] [#%d] loss_A: %f, loss_B: %f"  % (time.strftime("%H:%M:%S"), iter, loss_A, loss_B))
 </s> add         print("[{0}] [#{1:05d}] loss_A: {2:.5f}, loss_B: {3:.5f}".format(time.strftime("%H:%M:%S"), iter, loss_A, loss_B))
 </s> remove         model = PluginLoader.get_model(variant)(self.arguments.model_dir)
 </s> add         model = PluginLoader.get_model(self.arguments.trainer)(self.arguments.model_dir) </s> remove         variant = "Original" # TODO Pass as argument
        
 </s> add 
        self.images_A = minibatchAB(fn_A, self.batch_size)
        self.images_B = minibatchAB(fn_B, self.batch_size)

      BATCH_SIZE = 64
  
      def __init__(self, model, fn_A, fn_B):
          self.model = model
        self.images_A = minibatchAB(fn_A, self.batch_size)
        self.images_B = minibatchAB(fn_B, self.batch_size)
        self.images_A = minibatchAB(fn_A, self.batch_size)
        self.images_B = minibatchAB(fn_B, self.batch_size)
  
      def train_one_step(self, iter, viewer):
          epoch, warped_A, target_A = next(self.images_A)
          epoch, warped_B, target_B = next(self.images_B)
  
keep keep keep keep replace replace keep keep keep keep keep
 added batch-size cli argumet.
neatened up train.py and added LowMem trainer option.
Added save_now/show key to preview. 
lib/ModelAE.py