          logger.debug("Backing up and saving models")
          print("")  # Insert a new line to avoid spamming the same row as loss output
          save_averages = self._get_save_averages()
          if save_averages and self._should_backup(save_averages):
              self._backup.backup_model(self._filename)
              # pylint:disable=protected-access
              self._backup.backup_model(self._plugin.state._filename)
  
          include_optimizer = (force_save_optimizer or
                               self._save_optimizer == "always" or
                               (self._save_optimizer == "exit" and is_exit))
  
 
</s> remove             self._plugin.model.save(self._filename, include_optimizer=include_optimizer)
 </s> add             self._plugin.model.save(self.filename, include_optimizer=include_optimizer) </s> remove         if "[saved models]" not in output.strip().lower():
 </s> add         t_output = output.strip().lower()
        if "[saved model]" not in t_output or t_output.endswith("[saved model]"):
            # Not a saved model line or saving the model for a reason other than standard saving </s> remove             output = get_folder(os.path.join(str(self._model.model_dir),
 </s> add             output = get_folder(os.path.join(str(self._model.io.model_dir), </s> remove                 if self._command == "train" and output.startswith("Reading training images"):
                    print(output.strip(), file=sys.stdout)
 </s> add                 if self._process_training_determinate_function(output):
            self._backup.backup_model(self.filename)
            self._backup.backup_model(self._plugin.state.filename)
          logger.debug("Backing up and saving models")
          print("")  # Insert a new line to avoid spamming the same row as loss output
          save_averages = self._get_save_averages()
          if save_averages and self._should_backup(save_averages):
            self._backup.backup_model(self.filename)
            self._backup.backup_model(self._plugin.state.filename)
            self._backup.backup_model(self.filename)
            self._backup.backup_model(self._plugin.state.filename)
            self._backup.backup_model(self.filename)
            self._backup.backup_model(self._plugin.state.filename)
  
          include_optimizer = (force_save_optimizer or
                               self._save_optimizer == "always" or
                               (self._save_optimizer == "exit" and is_exit))
  
keep keep keep keep replace replace replace keep keep keep keep keep
 Learning Rate finder (#1341)

* Add LR Finder support structure

* Move trainer.Feeder to lib.training.generator

* Expose model.io

* Add lr_finder

* Update docs and locales

* Pre-PR fixups
  - Fix training graph not displaying
  - CI fixes
  - Switch lr finder progress to tqdm
  - Exit lr finder early on NaN
  - Display lr finder progress in GUI 
plugins/train/model/_base/io.py