mPotNet
mPotNet
mPotNet 是一个基于 PyTorch 和 PyTorch Geometric 的独立 PotNet 实现,用于根据 CIF 晶体结构预测材料带隙。
代码保留了 PotNet 的核心设计:将局域周期邻居图与包含全部原子对的长程图结合,并为长程边计算周期性 Coulomb 势、London 色散势和 Pauli 排斥势。局域距离与周期势经过径向基函数编码后,由门控消息传递层、全局平均池化和标量回归头完成带隙预测。
代码使用 pymatgen 解析 CIF 并构建周期图。周期求和函数直接使用 NumPy 和 SciPy 实现,不依赖 JARVIS、原始 PotNet 仓库、仓库内部模块或需要单独编译的 Cython/GSL 扩展。
环境依赖
|
|
仅当 USE_OPTUNA = True 时需要安装 Optuna:
|
|
数据准备
在脚本所在目录中准备以下文件:
|
|
脚本读取 data.xlsx 的前两列:
| cif | bandgap |
|---|---|
| 1 | 1.23 |
| 2 | 0.87 |
| 3 | 2.15 |
第一列中的 1 对应 ./cif/1.cif。当文件名不包含 .cif 后缀时,脚本会自动补充。缺失、重复、标签非有限值、无法解析或含无序占位的样本会被跳过,并在日志中记录原因。
使用方法
|
|
脚本会自动完成 CIF 检查、周期势预处理与缓存、固定的 80/10/10 训练集/验证集/测试集划分、仅基于训练集拟合的目标归一化、模型训练、早停、评估和绘图。当 CUDA 可用时自动使用 GPU,否则使用 CPU;CUDA 环境默认启用 BF16 自动混合精度。
所有结果保存在由 MODEL_NAME 和 RUN_VERSION 确定的目录中。按照默认设置,输出目录为:
|
|
输出内容包括训练集、验证集和测试集的 MAE、RMSE 与 R2,各数据集及合并奇偶图和对应数据,RMSE 训练曲线及其数据,可复用的固定数据划分,PotNet 图缓存,按照验证集 RMSE 选择的最佳模型权重,以及完整训练日志。
脚本中的 load_trained_model() 和 predict_cifs() 可以被其他 Python 程序导入,用于加载最佳模型并预测新的 CIF 结构。
显存说明
PotNet 为每个结构构建约含 N^2 条原子对边的完整长程图,因此显存会随原子数快速增长。对于较大的晶胞,建议首先降低 BATCH_SIZE,随后依次降低 HIDDEN_DIM 和 POTENTIAL_RBF_BINS。在支持的 NVIDIA GPU 上建议保持 USE_AMP = True 和 AMP_DTYPE = "bfloat16"。
引用
原始 PotNet 文献:
本工作:
论文正式发表后补充。