查看原文
其他

【DP系列教程-05】DeePMD-kit 的restart 和 init-model 工具

DP君 深度势能 2022-09-11


有很多小伙伴向DP君询问如何使用DeePMD-kit的restart和init-model工具,以及这两个工具有什么区别,今天DP君就给大家做一个简单的介绍。


restart工具顾名思义是重启动,一般用于训练过程异常终止后,想完全从中断的训练继续进行。restart完全继承上次训练的参数和超参数(训练步、学习率等)。restart 时不推荐修改输入脚本。

restart 的用法非常简单:
dp train --restart model.ckpt input.json
其中input.json是输入脚本,要和restart之前的输入脚本保持一致。model.ckpt 是TensorFlow 检查点文件,用于重启训练。


init-model一般用于改善当前模型。例如我们已有一个模型能够描述0-200K,0-10GPa的物质,且增加一些200-300K,0-10GPa的数据用于扩展模型的适用范围。这时或者将新数据加入旧数据集重新训练,或者我们偷懒使用init-model模式,继承旧模型中的知识,并让模型学会新数据中的知识。具体来说init-model使用一个已有模型中的参数初始化当前的模型参数,而训练过程则是重头来过。训练中学习步,学习率,能量、受力、维里系数等超参数可以自由设定。

学习率(learning rate)是反应如何调整网络权重的超参数。我们希望init-model模式继承了旧模型model.ckpt中的知识,但是在新的训练中,如果learning rate 过大,则旧模型知识会被很快遗忘,因此,在下面的例子中我们将初始学习率下调了一个量级,即从0.001下调至0.0001。
"learning_rate" :{   "stop_lr":     3.0e-8,  "type": "exp", "start_lr": 0.0001,     },
我们再回顾一下DeePMD-kit中各种权重(prefactor)的更新机制。
   公式中的p(t)代表能量、力、或者维里在训练过程中的权重,它是随学习率在训练过程中线性变化的,从训练开始的p_start逐渐演变为训练结束时的p_limit. 因此初始学习率改变则初始的能量,受力,维里loss function系数也要进行相应调整。

根据这个公式,DP君将"start_pref_e"和"start_pref_v"从一般训练中的0.02改为0.9,将"start_pref_f"从一般训练的1000变为100。 
"loss" :{ "start_pref_e": 0.9, "limit_pref_e": 1, "start_pref_f": 100, "limit_pref_f": 1, "start_pref_v": 0.9, "limit_pref_v": 1, "_comment": " that's all" },

如果我们想在新训练中着重改善能量预测精度,则可以适当增大loss function中能量的系数,例如: 

"loss" :{ "start_pref_e": 100    "limit_pref_e":100,         "start_pref_f": 1,         "limit_pref_f": 1,          "start_pref_v": 0.9,           "limit_pref_v": 1,          "_comment":         " that's all"     },
在DeePMD-kit的设置中,不同的数据system 出现的频率默认是和system中数据量成正比的,因此如果旧数据集很大,而新数据集很小,我们按照正常的设置,新数据在训练中被访问的频率就会太低,以致模型只在旧数据上温习,而无法获得新知识。这时就需要调整新旧数据集的出现频率了。例如,我们的数据集长这个样子:
"systems" : ["data.old0","data.old1","data.old2","data.new0","data.new1"],
其中前3个是旧数据集,后2个是新数据集。我们想让新旧数据集出现的频率是1:9,且不同旧数据集的出现频率仍然按数据量给定,不同新数据集的出现频率也仍然按数据量给定,则我们可以做如下设置:
"systems" : ["data.old0","data.old1","data.old2","data.new0","data.new1"],"auto_prob_style":  "prob_sys_size; 0:3:9; 3:5:1",
一般来说,我们可以指定新数据集是其默认出现频率的10倍左右。比如旧数据10000个,新数据100个,我们可以指定新旧数据的出现频率为1:9。最后,网络规模,sel 这些参数不要改变哦,否则init-model 模式无法正确载入模型参数。
配置好以上的参数,我们就可以通过如下的命令启动init-model模式啦。
dp train --init-model model.ckpt init-model.json
其中model.ckpt 是TensorFlow 检查点文件,用于初始化当前模型参数。init-model.json 是修改后的输入脚本,一般会和之前的训练有所不同。 


end


DP视角


最新独门秘籍放送,技巧虽小,效果拔群;操作简单,省时高效。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存