DeePMD分子偶极矩训练实操
从NH3真实量化标签出发,完成TensorFlow偶极模型训练、冻结、测试及方向变化分析。
阅读本篇目录
完成数据准备并进入同一个 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,适合快速学习流程。

图中是原生 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。红外强度或光谱还需要合适的轨迹、采样和相关函数处理,本例没有计算光谱。接着阅读极化率训练;概念见官方张量模型说明。
本组完整实例下载包包含三篇教程使用的全部可公开数据与脚本。