          self.autoencoder_B.compile(optimizer=optimizer, loss='mean_absolute_error')
          
          
      def load(self, swapped):
          
          face_A, face_B = (hdf['decoder_AH5'], hdf['decoder_BH5']) if not swapped else (hdf['decoder_BH5'], hdf['decoder_AH5'])
  
          try:            
              self.encoder.load_weights(os.path.join(self.model_dir, hdf['encoderH5']))
              self.decoder_A.load_weights(os.path.join(self.model_dir, face_A))
 
</s> remove             print('backup functionality not available\n')                                      
        
        # thought maybe I/O bound, sometimes saving in parallel is faster
        threads = []
        t = Thread(target=self.encoder.save_weights, args=(str(self.model_dir / hdf['encoderH5']),))
        threads.append(t)         
        t = Thread(target=self.decoder_A.save_weights, args=(str(self.model_dir / hdf['decoder_AH5']),))
        threads.append(t)
        t = Thread(target=self.decoder_B.save_weights, args=(str(self.model_dir / hdf['decoder_BH5']),))
        threads.append(t)
 </s> add             print('backup functionality not available\n')       
            
        state_dir = os.path.join(self.model_dir, 'state_{version_str}_{ENCODER.value}.json'.format(**globals()))
        ser = lib.Serializer.get_serializer('json')
        try:
            with open(state_dir, 'wb') as fp:
                state_json = ser.marshal({
                    'epoch_no' : self._epoch_no
                     })
                fp.write(state_json.encode('utf-8'))
        except IOError as e:
            pass                                </s> remove from .instance_normalization import InstanceNormalization

 </s> add  </s> remove         for thread in threads:
            thread.start()            
 </s> add         print('\nsaving model weights', end='', flush=True)        
        from concurrent.futures import ThreadPoolExecutor, as_completed
        from json import JSONDecodeError
          self.autoencoder_B.compile(optimizer=optimizer, loss='mean_absolute_error')
          
          
      def load(self, swapped):
        from json import JSONDecodeError
          face_A, face_B = (hdf['decoder_AH5'], hdf['decoder_BH5']) if not swapped else (hdf['decoder_BH5'], hdf['decoder_AH5'])
  
          try:            
              self.encoder.load_weights(os.path.join(self.model_dir, hdf['encoderH5']))
              self.decoder_A.load_weights(os.path.join(self.model_dir, face_A))
keep keep keep keep replace keep keep keep keep keep
 Update Model.py (#424)

- Added saving state (currently only saved epoch number, to be extended in future)
- Changed saving to ThreadPoolExecutor 
plugins/Model_OriginalHighRes/Model.py