示例#1
0
 def test_crystal_model_v2(self):
     cg = CrystalGraph()
     s = Structure(Lattice.cubic(3), ['Si'], [[0, 0, 0]])
     with ScratchDir('.'):
         model = MEGNetModel(nfeat_edge=None,
                             nfeat_global=2,
                             nblocks=1,
                             lr=1e-2,
                             n1=4,
                             n2=4,
                             n3=4,
                             npass=1,
                             ntarget=1,
                             graph_converter=cg,
                             centers=np.linspace(0, 4, 10),
                             width=0.5)
         model = model.train([s, s], [0.1, 0.1], epochs=2)
         t = model.predict_structure(s)
         self.assertTrue(t.shape == (1, ))
test_structures = structures[80:]
train_targets = targets[:80]
test_targets = targets[80:]

from megnet.models import MEGNetModel
from megnet.data.graph import GaussianDistance
from megnet.data.crystal import CrystalGraph
from megnet.utils.preprocessing import StandardScaler
import numpy as np

gc = CrystalGraph(bond_converter=GaussianDistance(np.linspace(0, 5, 100), 0.5),
                  cutoff=4)
model = MEGNetModel(100, 2, graph_converter=gc, lr=1e-3)

INTENSIVE = False  # U0 is an extensive quantity
scaler = StandardScaler.from_training_data(train_structures,
                                           train_targets,
                                           is_intensive=INTENSIVE)
model.target_scaler = scaler

model.train(train_structures, train_targets, epochs=500, verbose=2)

predicted_tests = []
for i in test_structures:
    predicted_tests.append(model.predict_structure(i).ravel()[0])

print(type(test_targets), type(predicted_tests))

for i in range(10):
    print(test_targets[i], predicted_tests[i])