!pip install pymatgen==2022.2.10
!pip install tensorflow==2.8.0
!pip install megnet==1.3.0
!pip install monty==2022.1.19
!pip install openpyxl==3.0.9
import numpy as np
from monty.json import MontyDecoder
from monty.serialization import loadfn
data = loadfn('data/bulk_moduli.json')
structures = data['structures']
# targets = np.log10(data['bulk_moduli'])
targets = (data['bulk_moduli'])
/root/venv/lib/python3.9/site-packages/pymatgen/core/__init__.py:49: UserWarning: Error loading .pmgrc.yaml: [Errno 2] No such file or directory: '/root/.pmgrc.yaml'. You may need to reconfigure your yaml file.
warnings.warn(f"Error loading .pmgrc.yaml: {ex}. You may need to reconfigure your yaml file.")
type(structures[0])
for (k,v) in enumerate(structures):
print(v.formula)
Co4 Se8
Ca2 Sn3 O8
Ta4 O10
Ca4 V4 O12
Cu2 Sn1 Se4
Ca4 Co2 N4
Y6 Mo6 O18
Ca4 Co4 O10
Y4 Cu4 O12
Co1 S2
Mo4 S8
W4 O12
Ca4 Fe4 O10
Ca6 Sn4 O14
Mo4 O12
Y1 Pd2 Pb1
Ca6 Fe4 O14
Mo4 O10
V2 Zn2 F8
Mo2 N4
Ca4 Ti8 O16
Ti4 Al2 O8
Ti6 Ir2
Fe1 Cu1 Pt2
Cs2 Na4 B2 O6
Mg1 Ge1 Rh2
Sr2 Zn2 Si2
Ca12 Al4 N12
Y4 Ni4 Sn4
Sc2 Be1 Tc1
Zr4 Ni2 As4
Ba2 Zn2 Bi4
Li3 Nb1 S4
Hf2 Fe1 Ir1
Ag8 Bi4 O12
Ca2 Ga6 Ni4
Ba6 Mn2 N6
Nb2 P2 Se2
Sc1 Sb1 Ru2
Rb2 Hg1 O2
Al1 Fe2 B2
In1 P1 S4
Ti4 Si4 Rh4
Ca1 P2 Pd2
V2 Rh2
Sc1 Al1 Pd2
Y2 S2 F2
Na2 Mg2 As2
V2 Cr1 Fe1
Os4 Se8
Rb2 Li1 Tl1 Cl6
Ba2 Zn1 F6
Ti1 Sn1 Ru2
Sc2 Ag1 Os1
Sc2 Ta2 O8
Li1 Zr1 Rh2
Hf2 Ge2 S2
Sc1 V1 Ru2
Ga2 Co1 S4
Be2 Co1 Ir1
Fe2 Pd2
Zr3 Sn3 Ir3
Sc1 Ga1 Ru2
Ni3 Mo3 P3
Ba1 Cd2 Sb2
Ti2 Tc1 Pt1
Li1 Mn1 Pd2
V4 In2 C2
Zr4 As4
Tl2 In2 Se4
Be2 Pt1 Rh1
K8 Cu4 Br12
Mg1 Sn1 Pd2
Zr2 Mn2 O6
Tl1 Co2 Se2
Zn2 Sn2 Sb4
Mn1 Al1 Rh2
Os4 S8
Be5 Pd1
Hf1 Si1 Ru2
Sc2 Al1 Ru1
Ca4 Mg4 Sn4
Ta4 Se8
Ba4 Br4 Cl4
Sc4 Ni4 Ge4
Fe3 Sn1 C1
Rb2 W1 Br6
Sc2 Cd1 Tc1
Li2 Fe2 As2
Sr2 Hf2 O6
Cr1 Pt1 O2
Ba2 Pd2 F8
In2 I2
Mg2 B18 N2
Sr2 Ga1 Sb1 O6
Mn4 As8 O16
Li2 Y2 F8
Ta2 Ti2 O8
Mg1 Sb1 Pd1
As8 Ir4
import matplotlib.pyplot as plt
%matplotlib inline
plt.hist(targets)
from megnet.data.crystal import CrystalGraph
from megnet.data.graph import GaussianDistance
from megnet.models import MEGNetModel
model = MEGNetModel(10, 2, nblocks=1, lr=1e-2,
n1=4, n2=4, n3=4, npass=1, ntarget=1,
graph_converter=CrystalGraph(bond_converter=GaussianDistance(np.linspace(0, 5, 10), 0.5)))
/root/venv/lib/python3.9/site-packages/keras/optimizer_v2/adam.py:105: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
super(Adam, self).__init__(name, **kwargs)
model.train(structures, targets, epochs=10)
Epoch 1/10
1/1 [==============================] - 10s 10s/step - loss: 17567.2520
Epoch 2/10
1/1 [==============================] - 0s 414ms/step - loss: 17544.6094
Epoch 3/10
1/1 [==============================] - 0s 340ms/step - loss: 17517.5508
Epoch 4/10
1/1 [==============================] - 0s 383ms/step - loss: 17483.4414
Epoch 5/10
1/1 [==============================] - 0s 342ms/step - loss: 17439.4727
Epoch 6/10
1/1 [==============================] - 0s 371ms/step - loss: 17381.9766
Epoch 7/10
1/1 [==============================] - 0s 337ms/step - loss: 17306.0840
Epoch 8/10
1/1 [==============================] - 0s 342ms/step - loss: 17205.2969
Epoch 9/10
1/1 [==============================] - 0s 373ms/step - loss: 17071.1387
Epoch 10/10
1/1 [==============================] - 0s 411ms/step - loss: 16893.0234
# model.save_model('data/saved_model')
# model.model.save_weights('data/saved_model_weights')
model.from_file('data/saved_model')
model.model.load_weights('data/saved_model/variables/variables')
model.train(structures, targets, epochs=10)
Epoch 1/10
1/1 [==============================] - 0s 368ms/step - loss: 8.8380
Epoch 2/10
1/1 [==============================] - 0s 329ms/step - loss: 15.7040
Epoch 3/10
1/1 [==============================] - 0s 356ms/step - loss: 5.8349
Epoch 4/10
1/1 [==============================] - 0s 349ms/step - loss: 7.7614
Epoch 5/10
1/1 [==============================] - 0s 347ms/step - loss: 14.4204
Epoch 6/10
1/1 [==============================] - 0s 352ms/step - loss: 4.8941
Epoch 7/10
1/1 [==============================] - 0s 403ms/step - loss: 8.8130
Epoch 8/10
1/1 [==============================] - 0s 354ms/step - loss: 15.6881
Epoch 9/10
1/1 [==============================] - 0s 403ms/step - loss: 5.8249
Epoch 10/10
1/1 [==============================] - 0s 332ms/step - loss: 7.7416
# from pymatgen import MPRester
from pymatgen.ext.matproj import MPRester
mpr = MPRester(api_key='DzQwLTxF5Cus3PkT')
# predicted_K = 10 ** model.predict_structure(structure).ravel()
structure = mpr.get_structure_by_material_id('mp-1143') # Al2O2: 232
predicted_K = model.predict_structure(structure).ravel()
print('The predicted K for {} is {} GPa'.format(structure.formula, predicted_K[0]))
The predicted K for Al4 O6 is 243.60702514648438 GPa
# predicted_K = 10 ** model.predict_structure(structure).ravel()
structure = mpr.get_structure_by_material_id('mp-1215')# TiO2: 184
# https://materialsproject.org/materials/mp-1215/
predicted_K = model.predict_structure(structure).ravel()
print('The predicted K for {} is {} GPa'.format(structure.formula, predicted_K[0]))
The predicted K for Ti2 O1 is 182.0220489501953 GPa
structure = mpr.get_structure_by_material_id('mp-1025377')
# https://materialsproject.org/materials/mp-1025377/ # Cd(AgI2)2:20
predicted_K = model.predict_structure(structure).ravel()
print('The predicted K for {} is {} GPa'.format(structure.formula, predicted_K[0]))
The predicted K for Cd1 Ag2 I4 is 16.54154396057129 GPa
structure = mpr.get_structure_by_material_id('mp-546794')
# https://materialsproject.org/materials/mp-546794/ # SiO2: 29
predicted_K = model.predict_structure(structure).ravel()
print('The predicted K for {} is {} GPa'.format(structure.formula, predicted_K[0]))
The predicted K for Si2 O4 is 91.74291229248047 GPa
structure = mpr.get_structure_by_material_id('mp-18732')# TiNiO3: 180
# https://materialsproject.org/materials/mp-18732/
predicted_K = model.predict_structure(structure).ravel()
print('The predicted K for {} is {} GPa'.format(structure.formula, predicted_K[0]))
The predicted K for Ti4 Ni4 O12 is 51.085693359375 GPa