symfc专题

symfc 二、三、四阶拟合

给出实际Symfc API与终端入口,用独立测试比较模型阶数和相互作用范围。

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

有了可靠的位移—力数据后,选择拟合阶数和截断半径,再分别检查训练、验证和测试误差。高阶模型并不自动保证更好的泛化,也不能替代足够的相互作用范围。

下载完整Si实例包,解压到自己的工作目录。包内保留123个真实静态力条件、独立训练/验证/测试划分、14个拟合条件、原生导出文件与绘图脚本。

1. 运行一个拟合#

新解压目录需要先在计算资源上运行 bash static-all.sh 得到 labels/;若只想用包内参考标签练习,可执行:

cp -r reference/labels labels
bash fit.sh Si16-fc23-c4p2

结果保存在 fits/Si16-fc23-c4p2/。同名目录已存在时不覆盖,重新计算请换新目录。

2. 关键API#

完整脚本 fit_case.py 的核心为:

from symfc import Symfc
from symfc.utils.utils import SymfcAtoms

supercell = SymfcAtoms(numbers, scaled_positions, cell)
model = Symfc(
    supercell,
    displacements=train_displacements,
    forces=train_forces,
    cutoff={2: 4.2, 3: 4.2},
)
model.run(orders=[2, 3], is_compact_fc=False, batch_size=16)
fc2 = model.force_constants[2]
fc3 = model.force_constants[3]

numbers、scaled_positions、cell描述同一个参考超胞;位移是笛卡尔坐标,不能把分数位移直接作为Å输入。只用训练部分建立系数,验证/测试用于模型之外的检查。

3. 比较不同阶数#

bash fit.sh Si16-fc2-c3p0
bash fit.sh Si16-fc23-c3p0
bash fit.sh Si16-fc234-c3p0

三者分别使用 [2]、[2,3]、[2,3,4]。Si16完整FC2、FC3、FC4形状依次为16²×3²、16³×3³、16⁴×3⁴,单位eV/Ų、eV/ų、eV/Å⁴。张量阶数增加后存储很快增大,应先用小体系估算资源。

条件 训练RMSE 验证RMSE 测试RMSE
Si16-fc2-c3p0 0.099914 0.078504 0.066355
Si16-fc23-c3p0 0.052762 0.054777 0.048971
Si16-fc234-c3p0 0.050963 0.054208 0.048717
Si16-fc23-c4p2 0.018643 0.015999 0.014436

表中单位均为eV/Å。最后一行扩大到4.2 Å,并未增加到四阶,却明显改善了这个独立测试集的误差。

实际阶数与独立验证结果

4. 独立回算的公式#

F = -FC2·u - (1/2)FC3·u·u - (1/6)FC4·u·u·u

三阶项的1/2和四阶项的1/6来自对能量泰勒展开求导。漏掉这些系数会把模型误差和单位弄错。配套分析脚本独立计算这个表达式,再与真实NEP力比较。

独立测试集的力回算

5. 读结果与导出文件#

cat fits/Si16-fc23-c4p2/RESULTS.json
ls fits/Si16-fc23-c4p2/

model.npz保存原始symfc顺序的完整张量、观测与回算力;fc2.hdf5、fc3.hdf5和 FORCE_CONSTANTS则按Phonopy原子顺序导出,映射在 ATOM-MAPPING.json。

四阶例子的 fc4.hdf5明确保存完整FC4和单位,仍是原始symfc顺序;它不是可以直接交给Phono3py三声子输运的输入。使用FourPhonon等其他程序时,还需要按其格式和原子索引转换。

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

查看配图

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

100%查看原图 ↗