DeePMD专题

DeePMD分子偶极矩训练实操

从NH3真实量化标签出发,完成TensorFlow偶极模型训练、冻结、测试及方向变化分析。

更新于 2026-11-11约 5 分钟阅读按任务与环境选择适用配置
阅读本篇目录

完成数据准备并进入同一个 NH3-tensors 目录后,先分析已提供结果,再提交自己的小训练。

1 整理参考结果#

bash analyze.sh

脚本核对参考数据,生成 tables/tensor-results.csv 和六张 figures/ 图片,同时重建单位换算后的标签。这里读取已有结果,不提交训练。

head -n 12 tables/tensor-results.csv

表内 dipole-atomic 和 dipole-global 都预测分子总偶极。前者用单个N中心的约定标签,后者用全局标签;这里只有一个选中中心,因此两条损失路线数学上等价。本例用它们演示文件命名与损失入口,不能当作两种物理原子划分。

2 提交训练、冻结和测试#

bash run.sh

默认申请核时P100分区1GPU、2个CPU核额度,依次训练 dipole-atomic、dipole-global、polar-global-allatoms 三个模型,每个3000步,并执行冻结、CLI测试以及同一权重的CPU/GPU预测。V10016G权限用户可将命令替换为 bash run.sh v100;两者都通过Slurm申请资源。脚本等候已提交作业,作业号在 new-work/SUBMISSIONS.json,排队时不要重复运行。重做请另建解压目录,避免覆盖结果。

实际原生训练命令依次为 dp --tf train input.json、dp --tf freeze -o model.pb、dp --tf test -m model.pb -s ../data/test -n 12 -d test。第三个极化率模型改用不含原子标签的 ../data-global/test 测试,训练数据同样位于 data-global/。这些命令由作业脚本在计算节点执行。

head -n 10 tables-new/your-tensors.csv

新训练、权重、曲线与预测位于 new-work/,新结果表为 tables-new/your-tensors.csv;参考结果保留在 reference/。CPU数值对照在同一次GPU作业的计算节点内隐藏CUDA设备运行,不能用作CPU计算节点性能数据。

3 输入文件怎么改#

原子约定标签模型的完整输入如下;dipole-global 只把损失切换为 pref=1、pref_atomic=0,其余训练设置相同。

{
  "model": {
    "type_map": [
      "N",
      "H"
    ],
    "data_stat_nbatch": 6,
    "descriptor": {
      "type": "se_e2_a",
      "sel": [
        4,
        8
      ],
      "rcut": 4.0,
      "rcut_smth": 3.5,
      "neuron": [
        8,
        16
      ],
      "axis_neuron": 4,
      "precision": "float64",
      "seed": 568001,
      "type_one_side": true,
      "resnet_dt": false
    },
    "fitting_net": {
      "type": "dipole",
      "sel_type": [
        0
      ],
      "neuron": [
        16,
        16
      ],
      "resnet_dt": false,
      "precision": "float64",
      "seed": 568002
    }
  },
  "learning_rate": {
    "type": "exp",
    "start_lr": 0.005,
    "stop_lr": 1e-06,
    "decay_steps": 300
  },
  "loss": {
    "type": "tensor",
    "pref_atomic": 1.0,
    "pref": 0.0
  },
  "training": {
    "training_data": {
      "systems": [
        "../data/train"
      ],
      "batch_size": 4
    },
    "validation_data": {
      "systems": [
        "../data/validation"
      ],
      "batch_size": 4,
      "numb_btch": 3
    },
    "numb_steps": 3000,
    "seed": 568003,
    "disp_file": "lcurve.out",
    "disp_freq": 100,
    "save_freq": 1000
  }
}

fitting_net.type=dipole 输出三分量向量;sel_type=[0] 选择N中心,loss.type=tensor 启用张量损失。pref_atomic 对应 atomic_dipole.npy,pref 对应 dipole.npy,不要把文件名与目标混用。numb_steps 是优化器训练步数,不是MD步数。本例双精度、小网络、截止4 Å、起始学习率0.005,适合快速学习流程。

P100和V100实际偶极训练曲线

图中是原生 lcurve.out 的实际采样行,训练损失按每批抽样变化;验证曲线按相同流程输出。重叠曲线保留原值,没有人为错开。3000步后不要求曲线严格单调。

4 如何判断预测方向#

未参与训练几何的实际偶极分量和模长

四个独立测试几何各含三种姿态,两个损失入口在P100/V100训练的分量RMSE约0.0008100 eÅ,约0.00389 D。这里RMSE对向量分量计算,不能与“模长误差”直接混为一谈。总偶极的正负取决于坐标和方向;转动分子时向量应同步转动,而模长应保持。

代码使用 from deepmd.tf.infer import DeepDipole,非周期调用为 model.eval(coords, None, [0,1,1,1], atomic=False);atomic=True 的结果可能按全部4个原子槽返回,未选中的H填零,不能用数组长度猜选中中心数。以 get_sel_type() 和元素类型对应。

这些权重只学习NH₃给定窄范围几何的HF/6-31G(d)标签,不能直接用于液氨、反应或其他分子;张量模型没有能量/力,不能单独驱动MD。红外强度或光谱还需要合适的轨迹、采样和相关函数处理,本例没有计算光谱。接着阅读极化率训练;概念见官方张量模型说明。

本组完整实例下载包包含三篇教程使用的全部可公开数据与脚本。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗