-
Notifications
You must be signed in to change notification settings - Fork 648
Polarizibility training #5511
Hi,
I am trying to train the deepMD model for the polarizability of BaZrO3. I have calculated the dielectric matrix tensor for different sampled configurations from AIMD and used this for training data. I used a single-unit-cell (5 atoms) for polarisation data.
I found rmse_trn and rmse_gl_trn are bouncing around wildly instead of steadily decreasing (as shown below):
44000 4.64e-01 nan 2.07e-01 1.0e-03
44100 7.36e-01 nan 3.29e-01 1.0e-03
44200 8.48e-01 nan 3.79e-01 1.0e-03
44300 6.99e-01 nan 3.13e-01 1.0e-03
44400 1.07e+00 nan 4.78e-01 1.0e-03
44500 1.95e+00 nan 8.74e-01 1.0e-03
44600 7.62e-01 nan 3.41e-01 1.0e-03
44700 5.06e-01 nan 2.26e-01 1.0e-03
44800 6.97e-01 nan 3.12e-01 1.0e-03
44900 6.80e-01 nan 3.04e-01 1.0e-03
45000 6.85e-01 nan 3.06e-01 1.0e-03
45100 8.03e-01 nan 3.59e-01 1.0e-03
45200 7.33e-01 nan 3.28e-01 1.0e-03
45300 3.30e-01 nan 1.48e-01 1.0e-03
45400 8.44e-01 nan 3.77e-01 1.0e-03
45500 1.71e+00 nan 7.64e-01 1.0e-03
45600 8.03e-01 nan 3.59e-01 1.0e-03
45700 1.62e+00 nan 7.24e-01 1.0e-03
45800 1.05e+00 nan 4.70e-01 1.0e-03
45900 6.22e-01 nan 2.78e-01 1.0e-03
46000 5.65e-01 nan 2.53e-01 1.0e-03
46100 3.74e-01 nan 1.67e-01 1.0e-03
46200 8.15e-01 nan 3.64e-01 1.0e-03
46300 3.57e-01 nan 1.60e-01 1.0e-03
46400 3.50e-01 nan 1.56e-01 1.0e-03
46500 4.86e-01 nan 2.17e-01 1.0e-03
46600 7.18e-01 nan 3.21e-01 1.0e-03
46700 6.15e-01 nan 2.75e-01 1.0e-03
46800 1.12e+00 nan 5.03e-01 1.0e-03
46900 1.65e+00 nan 7.37e-01 1.0e-03
47000 2.70e-01 nan 1.21e-01 1.0e-03
47100 5.69e-01 nan 2.54e-01 1.0e-03
"
I have also attached the training input file; I'm not sure if I made any mistakes.
inp.json
Thanks,
Mayank
All reactions
Replies: 1 comment
Hi Mayank,
A few points from your input file and the log:
-
The
nancolumn is expected with your current input becausevalidation_dataisnull. If you want a meaningful trend, please split out a small fixed validation set and add it undertraining.validation_data. -
The training RMSE printed in
lcurve.outis evaluated on the mini-batch used when the line is printed, not on the whole training set. Withbatch_size: 1, the polarizability tensor can vary substantially from frame to frame, so the reportedrmse_trn/rmse_gl_trnmay bounce a lot and is not expected to decrease monotonically. I would first try a larger batch size, or at least judge convergence from a moving average / a fixed validation set rather than individual printed lines. -
If your data only contains the total tensor label (
polarizability.npy/.raw, shapenframes x 9), I would set the atomic part of the loss to zero for clarity:
"loss": { "type": "tensor", "pref": 1, "pref_atomic": 0 }
Only keep pref_atomic > 0 if you also provide atomic_polarizability.npy/.raw labels.
-
Please also double-check the label you are fitting: the
polarfitting net is fitting a second-rank tensor label. If the quantity from AIMD is the dielectric tensor rather than the cell polarizability, make sure the target is defined consistently for all frames (units/convention, volume dependence, and the orderxx xy xz yx yy yz zx zy zz). -
If the validation curve is still unstable after the above checks, try lowering
start_lr(for example1e-4) and/or increasing the amount/diversity of training data. A 5-atom unit cell can work as a toy system, but the tensor target may still have large frame-to-frame variance.
So I would not diagnose this as a bug from the snippet alone. The first concrete changes I would make are: add validation data, increase batch_size, and set pref_atomic: 0 unless atomic tensor labels are present.
— OpenClaw 2026年6月8日 (844f405), model: custom-chat-jinzhezeng-group/gpt-5.5