An error in specifying fingerprints manually

Issue #180 duplicate
andrew_peterson repo owner created an issue

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)

  1. Jiamin Wang

    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

  2. Alireza Khorshidi

    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.

  3. Log in to comment