From 2decce785873ce138df16891029388257939cedf Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Sun, 27 Mar 2022 22:20:58 -0400 Subject: [PATCH 1/5] convert constants (which may change) to variables Following #1592, I noticed that constants cannot be recovered when restart training. --- deepmd/descriptor/se_a.py | 2 +- deepmd/fit/ener.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/deepmd/descriptor/se_a.py b/deepmd/descriptor/se_a.py index a4a316b839..2758faee6c 100644 --- a/deepmd/descriptor/se_a.py +++ b/deepmd/descriptor/se_a.py @@ -837,7 +837,7 @@ def _filter( # shape[1] = nnei * 4 nnei = shape[1] / 4 else: - nnei = np.sum(self.original_sel) + nnei = tf.Variable(np.sum(self.original_sel), trainable=False, name="nnei") xyz_scatter_1 = xyz_scatter_1 / nnei # natom x 4 x outputs_size_2 xyz_scatter_2 = tf.slice(xyz_scatter_1, [0,0,0],[-1,-1,outputs_size_2]) diff --git a/deepmd/fit/ener.py b/deepmd/fit/ener.py index ac207b4df9..d1adb5c158 100644 --- a/deepmd/fit/ener.py +++ b/deepmd/fit/ener.py @@ -495,7 +495,8 @@ def build (self, # tf.repeat is avaiable in TF>=2.1 or TF 1.15 _TF_VERSION = Version(TF_VERSION) if (Version('1.15') <= _TF_VERSION < Version('2') or _TF_VERSION >= Version('2.1')) and self.bias_atom_e is not None: - outs += tf.repeat(tf.constant(self.bias_atom_e, dtype=self.fitting_precision), natoms[2:]) + bias_atom_ei = tf.repeat(tf.constant(self.bias_atom_e, dtype=self.fitting_precision), natoms[2:]) + outs += tf.Variable(bias_atom_ei, trainable=False, name="bias_atom_ei") if self.tot_ener_zero: force_tot_ener = 0.0 From 34823289d4d108047ba8be8ade5b614f1c01ff51 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Sun, 27 Mar 2022 22:37:03 -0400 Subject: [PATCH 2/5] add dtype to variables --- deepmd/descriptor/se_a.py | 2 +- deepmd/fit/ener.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deepmd/descriptor/se_a.py b/deepmd/descriptor/se_a.py index 2758faee6c..8460c16501 100644 --- a/deepmd/descriptor/se_a.py +++ b/deepmd/descriptor/se_a.py @@ -837,7 +837,7 @@ def _filter( # shape[1] = nnei * 4 nnei = shape[1] / 4 else: - nnei = tf.Variable(np.sum(self.original_sel), trainable=False, name="nnei") + nnei = tf.Variable(np.sum(self.original_sel), dtype=tf.int32, trainable=False, name="nnei") xyz_scatter_1 = xyz_scatter_1 / nnei # natom x 4 x outputs_size_2 xyz_scatter_2 = tf.slice(xyz_scatter_1, [0,0,0],[-1,-1,outputs_size_2]) diff --git a/deepmd/fit/ener.py b/deepmd/fit/ener.py index d1adb5c158..15c1b25602 100644 --- a/deepmd/fit/ener.py +++ b/deepmd/fit/ener.py @@ -496,7 +496,7 @@ def build (self, _TF_VERSION = Version(TF_VERSION) if (Version('1.15') <= _TF_VERSION < Version('2') or _TF_VERSION >= Version('2.1')) and self.bias_atom_e is not None: bias_atom_ei = tf.repeat(tf.constant(self.bias_atom_e, dtype=self.fitting_precision), natoms[2:]) - outs += tf.Variable(bias_atom_ei, trainable=False, name="bias_atom_ei") + outs += tf.Variable(bias_atom_ei, trainable=False, name="bias_atom_ei", dtype=self.fitting_precision) if self.tot_ener_zero: force_tot_ener = 0.0 From 8870520d27b0d41507b154930c03afea58f31650 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Sun, 27 Mar 2022 22:44:28 -0400 Subject: [PATCH 3/5] cast int32 --- deepmd/descriptor/se_a.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepmd/descriptor/se_a.py b/deepmd/descriptor/se_a.py index 8460c16501..a71dee2709 100644 --- a/deepmd/descriptor/se_a.py +++ b/deepmd/descriptor/se_a.py @@ -837,7 +837,7 @@ def _filter( # shape[1] = nnei * 4 nnei = shape[1] / 4 else: - nnei = tf.Variable(np.sum(self.original_sel), dtype=tf.int32, trainable=False, name="nnei") + nnei = tf.cast(tf.Variable(np.sum(self.original_sel), dtype=tf.int32, trainable=False, name="nnei"), self.filter_precision) xyz_scatter_1 = xyz_scatter_1 / nnei # natom x 4 x outputs_size_2 xyz_scatter_2 = tf.slice(xyz_scatter_1, [0,0,0],[-1,-1,outputs_size_2]) From 16bdbda5aed41a9b924de20a69494a21e2e44eb5 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Mon, 28 Mar 2022 00:04:09 -0400 Subject: [PATCH 4/5] bugfix --- deepmd/fit/ener.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deepmd/fit/ener.py b/deepmd/fit/ener.py index 15c1b25602..a6684f78ba 100644 --- a/deepmd/fit/ener.py +++ b/deepmd/fit/ener.py @@ -495,8 +495,7 @@ def build (self, # tf.repeat is avaiable in TF>=2.1 or TF 1.15 _TF_VERSION = Version(TF_VERSION) if (Version('1.15') <= _TF_VERSION < Version('2') or _TF_VERSION >= Version('2.1')) and self.bias_atom_e is not None: - bias_atom_ei = tf.repeat(tf.constant(self.bias_atom_e, dtype=self.fitting_precision), natoms[2:]) - outs += tf.Variable(bias_atom_ei, trainable=False, name="bias_atom_ei", dtype=self.fitting_precision) + outs += tf.repeat(tf.Variable(self.bias_atom_e, dtype=self.fitting_precision, trainable=False, name="bias_atom_ei"), natoms[2:]) if self.tot_ener_zero: force_tot_ener = 0.0 From d507646b75bf66ab9b00ea18c1ea68d482361ac9 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Mon, 28 Mar 2022 06:27:27 -0400 Subject: [PATCH 5/5] init atom_ener --- deepmd/fit/ener.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepmd/fit/ener.py b/deepmd/fit/ener.py index a6684f78ba..5ac4354766 100644 --- a/deepmd/fit/ener.py +++ b/deepmd/fit/ener.py @@ -137,7 +137,7 @@ def __init__ (self, else: self.atom_ener.append(None) self.useBN = False - self.bias_atom_e = None + self.bias_atom_e = np.zeros(self.ntypes, dtype=np.float64) # data requirement if self.numb_fparam > 0 : add_data_requirement('fparam', self.numb_fparam, atomic=False, must=True, high_prec=False)