博客详情

主页 / 博客详情
blog

DGL v0.3.1 版本发布

我们收到了社区的许多请求,希望能有更多 GNN 层、模型和示例。是时候回应这些需求了。在此次小版本发布中,我们为 DGL 丰富了大量常用的 GNN 模块。我们还在一些流行数据集上验证了它们的正确性,欢迎大家试用。我们正在努力的另一个方向是基于 DGL 构建更多领域友好的软件包。作为第一步,我们发布了一些预训练的 GNN 模型,用于分子属性预测和分子生成(目前归类在 dgl.model_zoo 命名空间下)。我们将继续探索这个想法,并发布更多领域特定的模型和软件包。

新 API

新神经网络模块

新的全局池化模块

请参考API 文档了解更多详情。

新的图转换例程

  • dgl.transform.khop_adj
  • dgl.transform.khop_graph
  • dgl.transform.laplacian_lambda_max
  • dgl.transform.knn_graph
  • dgl.transform.segmented_knn_graph

请参考API 文档了解更多详情。

化学和分子应用的模型库

为了方便领域科学家,我们现在发布了一个用于化学的模型库,包含训练脚本和预训练模型,重点关注两个特定任务:属性预测和目标分子生成/优化。

致谢:特别感谢来自腾讯量子实验室的 @geekinglcq 贡献了三个模型(MGCN、SchNet 和 MPNN)。我们还感谢药明康德 CADD 团队提供的关于可用性的重要反馈。

属性预测

在实践中,分子属性的确定主要通过湿法实验室实验实现。我们可以将此问题视为回归或分类问题。

特征化是预测的开端。传统上,化学家开发预定义规则将分子图转换为二进制字符串,其中每个位表示特定子结构的在场或缺席。

图神经网络能够从原子、键和分子图拓扑中学习分子数据的表示,这可以看作是一种习得的指纹。消息传递机制使得模型能够学习分子中原子之间的相互作用。

以下代码脚本是自解释的。

from dgl.data.chem import Tox21
from dgl import model_zoo

dataset = Tox21()
model = model_zoo.chem.load_pretrained('GCN_Tox21') # Pretrained model loaded
model.eval()

smiles, g, label, mask = dataset[0]
feats = g.ndata.pop('h')
label_pred = model(g, feats)
print(smiles)                   # CCOc1ccc2nc(S(N)(=O)=O)sc2c1
print(label_pred[:, mask != 0]) # Mask non-existing labels
# tensor([[-0.7956,  0.4054,  0.4288, -0.5565, -0.0911,  
# 0.9981, -0.1663,  0.2311, -0.2376,  0.9196]])

支持的模型

  • 图卷积
  • 图注意力网络
  • SchNet
  • 多层图卷积神经网络
  • 消息传递神经网络

生成模型

目标分子生成是指寻找具有所需性质的新分子。这产生了对生成模型的两种需求:

  • 分布学习:给定一组分子,我们希望建模其分布并生成与该分布一致的新分子。
  • 目标导向优化:寻找具有所需性质的分子。

在此模型库中,我们仅提供基于图的生成模型。还有其他使用 SMILES 等替代表示的生成模型。

预训练模型示例

# We recommend running the code below with Jupyter notebooks
from IPython.display import SVG
from rdkit import Chem
from rdkit.Chem import Draw

from dgl import model_zoo

model = model_zoo.chem.load_pretrained('DGMG_ZINC_canonical')
model.eval()
mols = []
for i in range(4):
    SMILES = model(rdkit_mol=True)
    mols.append(Chem.MolFromSmiles(SMILES))
# Generating 4 molecules takes less than a second.

SVG(Draw.MolsToGridImage(mols, molsPerRow=4, subImgSize=(180, 150), useSVG=True))

支持的模型

  • 学习深度图生成模型
  • 用于分子图生成的连接树变分自编码器

API 不兼容变动

我们重构了 nn 包,使所有 API 更加一致。因此,API 有以下变动,这打破了之前的行为兼容性:

  • 改变 dgl.nn.pytorch.GraphConvdgl.nn.mxnet.GraphConv 的参数顺序。现在的参数顺序是先 graphfeat,这与其他所有新模块遵循的约定一致。

新模型示例

PyTorch 中的循环关系网络(贡献者:@HuXiangkun)

此外还有许多 Bug 修复和次要变动。我们将在下一个 0.4 主要版本中列出它们。