Skip to content

Commit 761374e

Browse files
committed
Handle atom_pref mask in force metrics
1 parent fe9fef8 commit 761374e

2 files changed

Lines changed: 23 additions & 10 deletions

File tree

deepmd/entrypoints/test.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,11 +419,17 @@ def test_ener(
419419
mae_e = mae(diff_e)
420420
rmse_e = rmse(diff_e)
421421
diff_f = force - test_data["force"][:numb_test]
422-
mae_f = mae(diff_f)
423-
rmse_f = rmse(diff_f)
424-
size_f = force.size
425422
if find_atom_pref == 1:
426423
atom_weight = test_data["atom_pref"][:numb_test]
424+
mask = atom_weight != 0
425+
masked_diff = diff_f[mask]
426+
if masked_diff.size > 0:
427+
mae_f = np.mean(np.abs(masked_diff))
428+
rmse_f = np.sqrt(np.mean(masked_diff * masked_diff))
429+
else:
430+
mae_f = 0.0
431+
rmse_f = 0.0
432+
size_f = mask.sum()
427433
weight_sum = np.sum(atom_weight)
428434
if weight_sum > 0:
429435
mae_fw = np.sum(np.abs(diff_f) * atom_weight) / weight_sum
@@ -433,6 +439,10 @@ def test_ener(
433439
else:
434440
mae_fw = 0.0
435441
rmse_fw = 0.0
442+
else:
443+
mae_f = mae(diff_f)
444+
rmse_f = rmse(diff_f)
445+
size_f = diff_f.size
436446
diff_v = virial - test_data["virial"][:numb_test]
437447
mae_v = mae(diff_v)
438448
rmse_v = rmse(diff_v)

source/tests/pt/test_dp_test.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,12 @@ def _prepare_weighted_system(self) -> str:
166166
shutil.copytree(src, tmp_dir, dirs_exist_ok=True)
167167
set_dir = Path(tmp_dir) / "set.000"
168168
forces = np.load(set_dir / "force.npy")
169+
forces[0, :3] += 1.0
169170
forces[0, -3:] += 10.0
170171
np.save(set_dir / "force.npy", forces)
171172
natoms = forces.shape[1] // 3
172173
atom_pref = np.ones((forces.shape[0], natoms), dtype=forces.dtype)
174+
atom_pref[:, 0] = 2.0
173175
atom_pref[:, -1] = 0.0
174176
np.save(set_dir / "atom_pref.npy", atom_pref)
175177
return tmp_dir
@@ -216,16 +218,17 @@ def test_force_weight(self) -> None:
216218
force_true = test_data["force"][:1]
217219
weight = test_data["atom_pref"][:1]
218220
diff = force_pred - force_true
219-
diff_w = diff * weight
221+
mask = weight != 0
222+
masked_diff = diff[mask]
223+
mae_unweighted = np.sum(np.abs(masked_diff)) / mask.sum()
224+
rmse_unweighted = np.sqrt(np.sum(masked_diff * masked_diff) / mask.sum())
220225
denom = weight.sum()
221-
mae_expected = np.sum(np.abs(diff_w)) / denom
222-
rmse_expected = np.sqrt(np.sum(diff * diff * weight) / denom)
223-
mae_unweighted = np.sum(np.abs(diff)) / diff.size
224-
rmse_unweighted = np.sqrt(np.sum(diff * diff) / diff.size)
226+
mae_weighted = np.sum(np.abs(diff) * weight) / denom
227+
rmse_weighted = np.sqrt(np.sum(diff * diff * weight) / denom)
225228
np.testing.assert_allclose(err["mae_f"][0], mae_unweighted)
226229
np.testing.assert_allclose(err["rmse_f"][0], rmse_unweighted)
227-
np.testing.assert_allclose(err["mae_fw"][0], mae_expected)
228-
np.testing.assert_allclose(err["rmse_fw"][0], rmse_expected)
230+
np.testing.assert_allclose(err["mae_fw"][0], mae_weighted)
231+
np.testing.assert_allclose(err["rmse_fw"][0], rmse_weighted)
229232
os.unlink(tmp_model.name)
230233

231234
def tearDown(self) -> None:

0 commit comments

Comments
 (0)