An error in specifying fingerprints manually
Issue #180
duplicate
As discussed in the mailing list, there seems to be an error in fmodules when specifying a fingerprint manually. A self-contained script replicating the problem is below:
from amp import Amp
from amp.descriptor.gaussian import Gaussian
from amp.model.neuralnetwork import NeuralNetwork
from amp.model import LossFunction
import os
from ase import Atoms, Atom, units
import ase.io
from ase.calculators.emt import EMT
from ase.lattice.surface import fcc110
from ase.md.velocitydistribution import MaxwellBoltzmannDistribution
from ase.md import VelocityVerlet
from ase.constraints import FixAtoms
from amp import Amp
from amp.descriptor.gaussian import Gaussian
from amp.model.neuralnetwork import NeuralNetwork
def generate_data(count, filename='training.traj'):
"""Generates test or training data with a simple MD simulation."""
if os.path.exists(filename):
return
traj = ase.io.Trajectory(filename, 'w')
atoms = fcc110('Pt', (2, 2, 2), vacuum=7.)
atoms.extend(Atoms([Atom('Cu', atoms[7].position + (0., 0., 2.5)),
Atom('Cu', atoms[7].position + (0., 0., 5.))]))
atoms.set_constraint(FixAtoms(indices=[0, 2]))
atoms.set_calculator(EMT())
atoms.get_potential_energy()
traj.write(atoms)
MaxwellBoltzmannDistribution(atoms, 300. * units.kB)
dyn = VelocityVerlet(atoms, dt=1. * units.fs)
for step in range(count - 1):
dyn.run(50)
traj.write(atoms)
generate_data(2)
Gs={'Cu': [{'type': 'G2', 'element' : 'Cu', 'eta' : 0.000},
{'type': 'G2', 'element' : 'Pt', 'eta' : 0.0000},
{'type': 'G2', 'element' : 'Cu', 'eta' : 0.012},
{'type': 'G2', 'element' : 'Pt', 'eta' : 0.0100},
{'type': 'G2', 'element' : 'Cu', 'eta' : 0.030},
{'type': 'G2', 'element' : 'Pt', 'eta' : 0.0240},
{'type': 'G2', 'element' : 'Cu', 'eta' : 0.062},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma': 1.0,'zeta': 6.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma': 1.0,'zeta': 6.0},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma':-1.0,'zeta': 6.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma':-1.0,'zeta':2.15},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma': 1.0,'zeta':15.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma': 1.0,'zeta':15.0},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma':-1.0,'zeta':15.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma':-1.0,'zeta': 2.9},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma': 1.0,'zeta':68.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma': 1.0,'zeta':68.0},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma':-1.0,'zeta':68.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma':-1.0,'zeta': 4.0}],
'Pt': [{'type': 'G2', 'element' : 'Cu', 'eta' : 0.0000},
{'type': 'G2', 'element' : 'Pt', 'eta' : 0.0000},
{'type': 'G2', 'element' : 'Cu', 'eta' : 0.0100},
{'type': 'G2', 'element' : 'Pt', 'eta' : 0.0085},
{'type': 'G2', 'element' : 'Cu', 'eta' : 0.0240},
{'type': 'G2', 'element' : 'Pt', 'eta' : 0.0220},
{'type': 'G2', 'element' : 'Cu', 'eta' : 0.0480},
{'type': 'G4', 'elements' : ['Cu','Cu'], 'eta':0.000,'gamma': 1.0,'zeta': 3.0},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma': 1.0,'zeta': 3.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma': 1.0,'zeta': 3.0},
{'type': 'G4', 'elements' : ['Cu','Cu'], 'eta':0.000,'gamma':-1.0,'zeta':1.65},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma':-1.0,'zeta': 3.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma':-1.0,'zeta': 3.0},
{'type': 'G4', 'elements' : ['Cu','Cu'], 'eta':0.000,'gamma': 1.0,'zeta': 6.0},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma': 1.0,'zeta': 6.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma': 1.0,'zeta': 6.0},
{'type': 'G4', 'elements' : ['Cu','Cu'], 'eta':0.000,'gamma':-1.0,'zeta':2.15},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma':-1.0,'zeta': 6.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma':-1.0,'zeta': 6.0},
{'type': 'G4', 'elements' : ['Cu','Cu'], 'eta':0.000,'gamma': 1.0,'zeta':15.0},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma': 1.0,'zeta':15.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma': 1.0,'zeta':15.0},
{'type': 'G4', 'elements' : ['Cu','Cu'], 'eta':0.000,'gamma':-1.0,'zeta': 2.9},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma':-1.0,'zeta':15.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma':-1.0,'zeta':15.0},
{'type': 'G4', 'elements' : ['Cu','Cu'], 'eta':0.000,'gamma': 1.0,'zeta':68.0},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma': 1.0,'zeta':68.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma': 1.0,'zeta':68.0},
{'type': 'G4', 'elements' : ['Cu','Cu'], 'eta':0.000,'gamma':-1.0,'zeta': 4.0},
{'type': 'G4', 'elements' : ['Pt','Cu'], 'eta':0.000,'gamma':-1.0,'zeta':68.0},
{'type': 'G4', 'elements' : ['Pt','Pt'], 'eta':0.000,'gamma':-1.0,'zeta':68.0}]}
#cores = {'node241': 16, 'node242': 16}
hl={'Pt': (20,20), 'Cu': (20,20)}
calc = Amp(descriptor=Gaussian(cutoff=11.,Gs=Gs,fortran=True, mode='atom-centered'),
model=NeuralNetwork(hiddenlayers=hl),
label='calc',
cores=1,
)
calc.model.lossfunction = LossFunction(convergence={'energy_rmse': 0.02,
'force_rmse': 0.02})
calc.train(images='training.traj')
Comments (3)
-
-
Yes, in the current version of the code, it is assumed that different chemical elements have the same number of fingerprints. To let the user choose different lengths of fingerprint for different elements, we needs further implementations.
-
reporter - changed status to duplicate
Duplicate of #172.
- Log in to comment
I had same problems, in amp it seems size of symmetry function for all elements should be same. But here you have 19 symmetry functions for Cu, while 32 symmetry functions for Pt