Esempio n. 1
0
    def evaluate_model(self):
        """ Evaluates model by calculating the UC-JSD from generated structures.
        Saves model scores in `validation.csv` and then saves model state.
        """
        self.model.eval()      # sets layers to eval mode (e.g. norm, dropout)
        with torch.no_grad():  # deactivates autograd engine

            # generate graphs required for model evaluation
            # note that evaluation of the generated graphs happens in
            # `generate_graphs()`, and molecules are saved as `self` attributes
            self.generate_graphs(n_samples=self.C.n_samples, evaluation=True)

            print("* Evaluating model.", flush=True)
            anal.evaluate_model(valid_dataloader=self.valid_dataloader,
                                train_dataloader=self.train_dataloader,
                                nll_per_action=self.nll_per_action,
                                model=self.model)

            self.nll_per_action = None  # don't need anymore

            print(f"* Saving model state at Epoch {self.current_epoch}.", flush=True)

            # `pickle.HIGHEST_PROTOCOL` good for large objects
            model_path_and_filename = (self.C.job_dir + f"model_restart_{self.current_epoch}.pth")
            torch.save(obj=self.model,
                       f=model_path_and_filename,
                       pickle_protocol=pickle.HIGHEST_PROTOCOL)
Esempio n. 2
0
    def testing_phase(self):
        """ Evaluates model using test set data.
        """
        self.test_dataloader = self.get_dataloader(self.test_h5_path,
                                                   "test set")
        self.get_ts_properties()

        self.restart_epoch = util.get_restart_epoch()
        print(
            f"* Loading model from previous saved state (Epoch {self.restart_epoch}).",
            flush=True)
        self.model = torch.load(self.C.job_dir +
                                f"model_restart_{self.restart_epoch}.pth")

        self.model.eval()
        with torch.no_grad():
            self.generate_graphs(n_samples=self.C.n_samples)

            print("* Evaluating model.", flush=True)
            anal.evaluate_model(valid_dataloader=self.test_dataloader,
                                train_dataloader=self.train_dataloader,
                                nll_per_action=self.nll_per_action,
                                model=self.model)

        self.print_time_elapsed()