train.py → BaseTrainerpredict.py → FieldPredictor电子密度场预测
预测式 InfGCN · MatENO
train.py → BaseTrainerpredict.py → FieldPredictor材料性质(能量/形成能/Cv 等)
预测式 DimeNetPlusPlus · iComformer · MEGNetPlus · SphereNet
train.py → BaseTrainerpredict.py → PropertyPredictor原子间势(能量/力/应力)
预测式 CHGNet · M3GNet(MatterSim) · SphereNet
train.py → BaseTrainerpredict.py → PotentialPredictorSTEM 图像增强
预测式 SFIN
train.py → BaseTrainerpredict.py → SpectrumPredictorNMR 谱 → 分子结构
生成式 DiffNMR
train.py → BaseTrainersample.py → MolecularSampler条件/无条件晶体生成
生成式 DiffCSP · MatterGen
train.py → BaseTrainersample.py → StructureSampler8 个预测式模型的 forward 完全一致:
class MyModel(paddle.nn.Layer):
def forward(self, data, return_loss=True, return_prediction=True):
pred = self._forward(data) # 内部前向(各模型不同)
loss_dict, pred_dict = {}, {}
if return_loss: # 训练时:算 loss
loss_dict["loss"] = some_loss(pred, data["label"])
if return_prediction: # 评估/推理时:返回预测
pred_dict["property"] = pred
return {"loss_dict": loss_dict, "pred_dict": pred_dict}
| 模型 | 任务 | 输入 data | 输出 pred_dict |
|---|---|---|---|
InfGCN | 电子密度 | graph + grid_coord | density(体网格密度场) |
MatENO | 电子密度 | graph + grid_coord | density |
DimeNetPlusPlus | 性质 | graph(分子/晶体) | 标量性质(如形成能) |
iComformer | 性质 | graph(晶体) | 标量性质 |
MEGNetPlus | 性质 | graph(分子/晶体) | 标量性质(property_name) |
SphereNet | 性质/势 | graph + triplet indices | 能量 / 力 |
CHGNet | 势 | graph(晶体 + angles) | energy_per_atom · force · stress · magmom |
M3GNet(MatterSim) | 势 | graph(晶体/分子) | 能量 / 力 / 应力 |
SFIN | 图像增强 | image tensor | 增强后的 target_name 图像 |
训练与生成分离:训练时 forward 返回扩散 loss(BaseTrainer 优化);生成时调 model.sample()(不经过 Trainer)。
# 训练(BaseTrainer)
def forward(self, batch):
... # 扩散前向:加噪 → 预测噪声 → loss
return {"loss_dict": {"loss": total_loss, "loss_coord": ..., "loss_atom": ...}}
# 生成(sample.py + Sampler,不经 Trainer)
def sample(self, batch, num_inference_steps=1000, **kwargs):
... # 反向扩散采样
return generated_structures
| 模型 | 任务 | 生成目标 | 采样器 |
|---|---|---|---|
DiffNMR | NMR 谱阐明 | NMR 谱 → 分子图 | MolecularSampler |
DiffCSP | 晶体结构生成 | 原子类型+坐标+晶格 → 晶体 | StructureSampler |
MatterGen / MatterGenWithCondition | 条件晶体生成 | (条件)→ 晶体 | StructureSampler |
| 组件 | 用途 | 使用任务 |
|---|---|---|
RadiusGraphConverter | 分子/晶体 → PGL 半径图 | 性质、势、电子结构、NMR |
MolecularGraphConverter | RDKit Mol → PGL 图 | NMR、性质(分子) |
CHGNetGraphConverter · M3GNetGraphConvertor | 任务专用图构建 | 势(CHGNet/M3GNet) |
DefaultCollator | 通用 batch(ndarray/pgl.Graph/Data) | 全部 |
RadiusGraphCollator | 半径图 batch + triplet 偏移 | 性质、势 |
DensityCollator | 体密度场 batch(padding+mask) | 电子结构 |
MolecularSampler · StructureSampler | 扩散采样编排 | NMR、结构生成 |
BasePredictor → Field/Property/Potential/Spectrum | 推理编排 | 预测式任务 |
build_vocab | 原子/键词表(注册+下载) | 按需(电子结构、NMR) |
| 你的目标 | 推荐模型 | 理由 |
|---|---|---|
| 预测分子/晶体标量性质 | SphereNet · MEGNetPlus · DimeNetPlusPlus | 成熟的 3D GNN,SE(3) 等变或消息传递 |
| 预测能量/力/应力(势) | CHGNet · M3GNet(MatterSim) · SphereNet | 含力/应力输出,适合 MD |
| 预测电子密度场 | InfGCN · MatENO | 连续场算子学习,SE(3) 等变 |
| 图像增强(STEM) | SFIN | 专门的频谱图像增强网络 |
| 从 NMR 谱生成分子 | DiffNMR | 扩散 + CLIP 条件 |
| 生成晶体结构 | MatterGen(条件)/ DiffCSP | 扩散模型,支持条件生成 |
以下为 MODEL_REGISTRY(ppmat/models/__init__.py)中已注册的预训练权重,通过 --model_name 自动下载:
| 任务 | 模型 | 注册名(--model_name) | 数量 |
|---|---|---|---|
| property_prediction | iComformer | comformer_mp2018_train_60k_{e_form,band_gap,G,K} · comformer_mp2024_train_130k_e_form · comformer_jarvis_{dft_2d,dft_3d,alex_pbe_2d_all}_e_form | 8 |
| MEGNetPlus | megnet_mp2018_train_60k_{e_form,band_gap,G,K} · megnet_mp2024_train_130k_e_form · megnet_jarvis_{dft_2d,dft_3d,alex_pbe_2d_all}_e_form | 8 | |
| DimeNetPlusPlus | dimenetpp_mp2018_train_60k_{e_form,band_gap,G,K} | 4 | |
| SphereNet | spherenet_qm9_{mu,alpha,homo,lumo,gap,r2,zpve,U0,U,H,G,Cv} | 12 | |
| interatomic_potentials | CHGNet | chgnet_mptrj | 1 |
| M3GNet(MatterSim) | mattersim_{1M,5M} | 2 | |
| SphereNet | spherenet_md17_{aspirin,benzene_old,ethanol,malonaldehyde,naphthalene,salicylic,toluene,uracil} | 8 | |
| electronic_structure | InfGCN | infgcn_md17_{benzene,ethane,ethanol,malonaldehyde,phenol,resorcinol} · infgcn_{mp,qm9} · infgcn_omol25_mc_5k_trimmed | 9 |
| spectrum_enhancement | SFIN | sfin_{haadf,bf}_{enhance,detect} | 4 |
| spectrum_elucidation | DiffNMR | diffnmr_msdnmr_nless15 | 1 |
| structure_generation | DiffCSP | diffcsp_mp20 | 1 |
| MatterGen | mattergen_{mp20,alex_mp20}_*(含 dft_band_gap / chemical_system / dft_bulk_modulus / dft_mag_density / space_group 等条件变体) · mattergen_ml2ddb{,_chemical_system,_space_group} | 17 |
{a,b,c} 表示该前缀下的多个变体。如 spherenet_qm9_{mu,alpha} = spherenet_qm9_mu + spherenet_qm9_alpha。用法:python <task>/predict.py --model_name <注册名> --weights_name best.pdparams。ppmat/models/__init__.py,配置里用 __class_name__ 引用。MODEL_REGISTRY(同文件)管理预训练权重的 BCE 下载链接。详见 Trainer 文档 →