Ejemplo n.º 1
0
def get_energy_metrics(config):
    trainer = AtomsTrainer(config)
    trainer.train()
    predictions = trainer.predict(images)
    pred_energies = np.array(predictions["energy"])
    mae = np.mean(np.abs(true_energies - pred_energies))
    assert mae < 0.02
Ejemplo n.º 2
0
def get_force_metrics(config):
    trainer = AtomsTrainer(config)
    trainer.train()
    predictions = trainer.predict(images)
    pred_energies = np.array(predictions["energy"])
    pred_forces = np.concatenate(np.array(predictions["forces"]))

    e_mae = np.mean(np.abs(true_energies - pred_energies))
    f_mae = np.mean(np.abs(pred_forces - true_forces))
    assert e_mae < 0.06
    assert f_mae < 0.06
Ejemplo n.º 3
0
def get_performance_metrics(config):
    trainer = AtomsTrainer(config)
    trainer.train()
    predictions = trainer.predict(images)
    pred_energies = np.array(predictions["energy"])
    pred_forces = np.concatenate(np.array(predictions["forces"]))

    e_mae = np.mean(np.abs(true_energies - pred_energies))
    f_mae = np.mean(np.abs(pred_forces - true_forces))
    assert e_mae < 0.01, "%f !< .01" % e_mae
    assert f_mae < 0.03, "%f !< .03" % f_mae

    return e_mae, f_mae
Ejemplo n.º 4
0
        "batch_size": 10,
        "epochs": 100,
    },
    "dataset": {
        "raw_data": images,
        "val_split": 0,
        "elements": elements,
        "fp_scheme": "mcsh",
        "fp_params": MCSHs,
        "save_fps": True,
    },
    "cmd": {
        "debug": False,
        "run_dir": "./",
        "seed": 1,
        "identifier": "test",
        "verbose": True,
        "logger": False,
    },
}

trainer = AtomsTrainer(config)
trainer.train()

predictions = trainer.predict(images[:10])

true_energies = np.array([image.get_potential_energy() for image in images])
pred_energies = np.array(predictions["energy"])

print("Energy MSE:", np.mean((true_energies - pred_energies)**2))
Ejemplo n.º 5
0
        "scaling": {
            "type": "normalize",
            "range": (0, 1)
        },
    },
    "cmd": {
        "debug": False,
        "run_dir": "./",
        "seed": 1,
        "identifier": "test",
        "verbose": True,
        # Weights and Biases used for logging - an account(free) is required
        "logger": False,
    },
}

torch.set_num_threads(1)
trainer = AtomsTrainer(config)
trainer.train()

predictions = trainer.predict(images)

true_energies = np.array([image.get_potential_energy() for image in images])
pred_energies = np.array(predictions["energy"])

print("Energy MSE:", np.mean((true_energies - pred_energies)**2))
print("Energy MAE:", np.mean(np.abs(true_energies - pred_energies)))

image.set_calculator(AMPtorch(trainer))
image.get_potential_energy()
Ejemplo n.º 6
0
def module_evaluate(learning_rate, num_nodes, num_layers):

    learning_rate = float(learning_rate)
    num_nodes = int(num_nodes)
    num_layers = int(num_layers)

    input_filename = "../data/water_dft.traj"

    # split input if there's no split
    if (os.path.exists("../data/train.traj") is
            False) or (os.path.exists("../data/test.traj") is False):
        print("Creating train_test split. ")
        train_ratio = 0.9
        training_list, test_list = split_train_test(
            input_filename,
            train_ratio,
            save=True,
            filenames=["../data/train.traj", "../data/test.traj"])
    else:
        print("Reading train_test split. ")
        training_list, test_list = load_training_data("../data/train.traj",
                                                      "../data/test.traj")

    sigmas = np.logspace(np.log10(0.02), np.log10(1.0), num=5)
    MCSHs = {
        "MCSHs": {
            "0": {
                "groups": [1],
                "sigmas": sigmas
            },
            "1": {
                "groups": [1],
                "sigmas": sigmas
            },
            "2": {
                "groups": [1, 2],
                "sigmas": sigmas
            },
            "3": {
                "groups": [1, 2, 3],
                "sigmas": sigmas
            },
            "4": {
                "groups": [1, 2, 3, 4],
                "sigmas": sigmas
            },
            "5": {
                "groups": [1, 2, 3, 4, 5],
                "sigmas": sigmas
            },
            # "6": {"groups": [1, 2, 3, 4, 5, 6, 7], "sigmas": sigmas},
        },
        "atom_gaussians": {
            "H": "../MCSH_potentials/H_pseudodensity_2.g",
            "O": "../MCSH_potentials/O_pseudodensity_4.g",
        },
        "cutoff": 8,
    }

    elements = ["H", "O"]
    config = {
        "model": {
            "get_forces": True,
            "num_layers": num_layers,
            "num_nodes": num_nodes
        },
        "optim": {
            "device": "cpu",
            "force_coefficient": 0.2,
            "lr": learning_rate,
            "batch_size": 8,
            "epochs": 200,
        },
        "dataset": {
            "raw_data": training_list,
            # "val_split": 0.1,
            "elements": elements,
            "fp_scheme": "gmp",
            "fp_params": MCSHs,
            "save_fps": True,
        },
        "cmd": {
            "debug": False,
            "run_dir": "./",
            "seed": 1,
            "identifier": "test",
            "verbose": False,
            "logger": False,
        },
    }

    trainer = AtomsTrainer(config)
    trainer.train()

    predictions = trainer.predict(test_list)

    true_energies = np.array(
        [image.get_potential_energy() for image in test_list])
    pred_energies = np.array(predictions["energy"])

    mae_result = np.mean(np.abs(true_energies - pred_energies))

    return mae_result
Ejemplo n.º 7
0
def objective_function(rank, scratch_dir, params):
    train_images = Trajectory('train.traj')
    test_images = Trajectory('test.traj')

    elements = np.unique([atom.symbol for atom in train_images[0]])
    cutoff = 6.0
    cosine_cutoff_params = {'cutoff_func': 'cosine'}
    gds = GaussianDescriptorSet(elements, cutoff, cosine_cutoff_params)

    g2_etas = [0.25, 2.5, 0.25, 2.5]
    g2_rs_s = [0.0, 0.0, 3.0, 3.0]
    gds.batch_add_descriptors(2, g2_etas, g2_rs_s, [])

    g4_etas = [0.005, 0.005, 0.01, 0.01]
    g4_zetas = [1.0, 4.0, 4.0, 16.0]
    g4_gammas = [1.0, 1.0, -1.0, -1.0]
    gds.batch_add_descriptors(4, g4_etas, g4_zetas, g4_gammas)

    amptorch_config = {
        'model': {
            'get_forces': True,
            'num_layers': params['num_layers'],
            'num_nodes': params['num_nodes'],
            'batchnorm': False,
        },
        'optim': {
            'force_coefficient': 0.04,
            'lr': 1e-2,
            'batch_size': 32,
            'epochs': 100,
            'loss': 'mse',
            'metric': 'mae',
            'gpus': 0,
        },
        'dataset': {
            'raw_data': train_images,
            'val_split': 0.1,
            'fp_params': gds,
            'save_fps': True,
            'scaling': {
                'type': 'normalize',
                'range': (0, 1)
            },
        },
        'cmd': {
            'debug': False,
            'run_dir': scratch_dir,
            'seed': 1,
            'identifier': 'rank{}'.format(rank),
            'verbose': False,
            'logger': False,
        },
    }

    mse = None
    with NoLogging():
        # train on train_images.traj
        torch.set_num_threads(1)
        trainer = AtomsTrainer(amptorch_config)
        trainer.train()

        # evaluate on test_images.traj
        predictions = trainer.predict(test_images)
        true_energies = np.array(
            [image.get_potential_energy() for image in test_images])
        pred_energies = np.array(predictions['energy'])
        mse = np.mean((true_energies - pred_energies)**2)

    return mse
Ejemplo n.º 8
0
    "cmd": {
        "debug": False,
        "run_dir": "./",
        "seed": 1,
        "identifier": "test",
        "verbose": True,
        # Weights and Biases used for logging - an account(free) is required
        "logger": False,
    },
}

torch.set_num_threads(4)
trainer = AtomsTrainer(config)
trainer.train()

predictions = trainer.predict(images_test)

true_energies = np.array([image.get_potential_energy() for image in images_test])
pred_energies = np.array(predictions["energy"])
DataFrame(true_energies).to_csv('figures/true_energies.csv')
DataFrame(pred_energies).to_csv('figures/pred_energies.csv')

print("Energy MSE:", np.mean((true_energies - pred_energies) ** 2))
print("Energy MAE:", np.mean(np.abs(true_energies - pred_energies)))

plt.scatter(true_energies, pred_energies)
plt.plot(min(true_energies), max(true_energies))
plt.ylabel('Amptorch base level predictions')
plt.xlabel('True energies')
combined = true_energies + pred_energies
minn = min(combined)
Ejemplo n.º 9
0
    "cmd": {
        "debug": False,
        "run_dir": "./",
        "seed": 1,
        "identifier": "test",
        "verbose": True,
        "logger": False,
    },
}

config["dataset"]["cutoff_params"] = cosine_cutoff_params
torch.set_num_threads(1)
cosine_trainer = AtomsTrainer(config)
cosine_trainer.train()

predictions = cosine_trainer.predict(images)

true_energies = np.array([image.get_potential_energy() for image in images])
cosine_pred_energies = np.array(predictions["energy"])

image.set_calculator(AMPtorch(cosine_trainer))
image.get_potential_energy()

config["dataset"]["cutoff_params"] = polynomial_cutoff_params
torch.set_num_threads(1)
polynomial_trainer = AtomsTrainer(config)
polynomial_trainer.train()

predictions = polynomial_trainer.predict(images)

polynomial_pred_energies = np.array(predictions["energy"])