Example #1
0
 def add_data(self, queried_images):
     for query in queried_images:
         self.training_data, self.parent_dataset = bootstrap_ensemble(
             self.parent_dataset,
             self.training_data,
             query,
             n_ensembles=self.ensemble,
         )
     return self.parent_dataset, self.training_data
Example #2
0
    def __init__(self, learner_params, trainer, training_data, parent_calc,
                 base_calc, ensemble):
        super().__init__(learner_params, trainer, training_data, parent_calc,
                         base_calc)

        self.ensemble = ensemble
        assert isinstance(ensemble, int) and ensemble > 1, "Invalid ensemble!"
        self.training_data, self.parent_dataset = bootstrap_ensemble(
            self.training_data, n_ensembles=ensemble)
        self.parent_calls = 0
Example #3
0
 def add_data(self, queried_images):
     for query in queried_images:
         # bug here maybe?: self.training_data and self.parent_dataset
         # are being overwritten in every iteration.
         self.training_data, self.parent_dataset = bootstrap_ensemble(
             self.parent_dataset,
             self.training_data,
             query,
             n_ensembles=self.ensemble,
         )
     return self.parent_dataset, self.training_data
Example #4
0
 def init_training_data(self):
     """
     Prepare the training data by attaching delta values for training.
     """
     raw_data = self.parent_dataset
     sp_raw_data = convert_to_singlepoint(raw_data)
     parent_ref_image = sp_raw_data[0].copy()
     base_ref_image = compute_with_calc(sp_raw_data[:1], self.base_calc)[0]
     self.refs = [parent_ref_image, base_ref_image]
     self.delta_sub_calc = DeltaCalc(self.calcs, "sub", self.refs)
     self.ensemble_sets, self.parent_dataset = bootstrap_ensemble(
         compute_with_calc(sp_raw_data, self.delta_sub_calc))
Example #5
0
    def __init__(self, learner_params, parent_dataset, parent_calc, base_calc,
                 trainer, n_ensembles, n_cores):
        Calculator.__init__(self)

        self.n_ensembles = n_ensembles
        self.parent_calc = parent_calc
        self.base_calc = base_calc
        self.calcs = [parent_calc, base_calc]
        self.trainer = trainer
        self.learner_params = learner_params
        self.n_cores = n_cores
        self.ensemble_sets, self.parent_dataset = bootstrap_ensemble(
            parent_dataset, n_ensembles=n_ensembles)
        self.init_training_data()
        self.ensemble_calc = make_ensemble(self.ensemble_sets, self.trainer,
                                           self.base_calc, self.refs,
                                           self.n_cores)

        self.uncertain_tol = learner_params["uncertain_tol"]
        self.parent_calls = 0
        self.init_training_data()
Example #6
0
    def calculate(self, atoms, properties, system_changes):
        Calculator.calculate(self, atoms, properties, system_changes)

        energy_pred = self.ensemble_calc.get_potential_energy(atoms)
        force_pred = self.ensemble_calc.get_forces(atoms)
        uncertainty = atoms.info["uncertainty"][0]
        db = connect('dft_calls.db')

        cwd = os.getcwd()
        if uncertainty >= self.uncertain_tol:
            print('DFT required')
            new_data = atoms.copy()
            new_data.set_calculator(copy.copy(self.parent_calc))
            # os.makedirs("./temp", exist_ok=True)
            # os.chdir("./temp")

            energy_pred = new_data.get_potential_energy(apply_constraint=False)
            force_pred = new_data.get_forces(apply_constraint=False)
            new_data.set_calculator(
                sp(atoms=new_data, energy=energy_pred, forces=force_pred))
            # os.chdir(cwd)
            # os.system("rm -rf ./temp")

            energy_list.append(energy_pred)
            db.write(new_data)
            self.ensemble_sets, self.parent_dataset = bootstrap_ensemble(
                self.parent_dataset, self.ensemble_sets, new_data=new_data)

            self.ensemble_calc = make_ensemble(self.ensemble_sets,
                                               self.trainer, self.base_calc,
                                               self.refs, self.n_cores)

            self.parent_calls += 1
        else:
            db.write(None)
        self.results["energy"] = energy_pred
        self.results["forces"] = force_pred