前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DGL | 基于深度学习框架DGL的分子图初探

DGL | 基于深度学习框架DGL的分子图初探

作者头像
DrugAI
发布2021-01-29 07:48:55
1.1K0
发布2021-01-29 07:48:55
举报
文章被收录于专栏:DrugAI

DGL简介

纽约大学、纽约大学上海分校、AWS上海研究院以及AWS MXNet Science Team共同开源了一个面向图神经网络及图机器学习的全新框架,命名为Deep Graph Library(DGL)。

在设计上,DGL秉承三项原则:

  • DGL必须和目前的主流的深度学习框架(Pytorch, MXNet, Tensorflow等)无缝衔接。从而实现从传统的tensor运算到图运算的自由转换。
  • DGL应该提供最少的API以降低用户的学习门槛。
  • 在保证以上两点的基础之上,DGL能高效并透明地并行图上的计算,以及能很方便地扩展到巨图上。

DGL与化学

个人关注的是药物模型,用于分子性质预测,生成和优化的各种模型,DGL 致力于将GNN(图形神经网络)应用于化学领域,并且作为分子生成模型,DGMG(图形的深度生成模型)和JT-VAE(连接树变分自动编码器),并且发行说明中有一个使用DGMG的非常简单的示例。

性质预测

为了评估候选药物分子,我们需要了解其性质和活性。实际上,这主要是通过湿实验室实验来实现的。我们可以将该问题转换为回归或分类问题。实际上,由于标记数据的缺乏,这可能非常困难。

特征化与表征学习

指纹已经成为化学信息学中广泛使用的概念。化学家开发了一种规则,将分子转换为二进制字符串,其中每个位都表明存在或不存在特定的子结构。指纹的发展使分子的比较容易得多。以前的机器学习方法主要基于分子指纹来开发。

图神经网络使数据驱动的原子、键和分子图拓扑结构之外的分子表示成为可能,这可以看作是学习指纹。

模型

图的深度生成模型(DGMG,Deep Generative Models of Graphs):通过逐步添加原子和键来进行图分布学习的非常通用的框架。

分子图生成(JTNN,Junction Tree Variational Autoencoder for Molecular Graph Generation)的连接树变分自动编码器 :JTNN能够逐步扩展分子,同时保持每一步的化学价。它们可用于分子生成和优化。

基于深度学习框架DGL的分子图初探

导入库

代码语言:javascript
复制
import osimport numpy as npimport pandas as pdfrom rdkit import Chemfrom rdkit.Chem import RDConfigimport torchimport torch.nn as nnimport torch.optim as optimimport torch.nn.functional as Ffrom torch.utils.data import DataLoaderfrom torch.utils.data import Datasetimport dglimport dgl.function as fnfrom dgl import DGLGraph

定义元素列表

代码语言:javascript
复制
ELEM_LIST = ['C', 'N', 'O', 'S', 'F', 'Si', 'P', 'Cl', 'Br', 'Mg', 'Na', 'Ca', 'Fe', 'Al', 'I', 'B', 'K', 'Se',             'Zn', 'H', 'Cu', 'Mn', 'unknown']ATOM_FDIM = len(ELEM_LIST) + 6 + 5 + 4 + 1  # 23 + degree, charge, is_aromatic = 39

代码来自dgl的 junction tree,生成分子结构图

代码语言:javascript
复制
def get_mol(smiles):    mol = Chem.MolFromSmiles(smiles)    if mol is None:         return None    Chem.Kekulize(mol)    return mol
def onek_encoding_unk(x, allowable_set):    if x not in allowable_set:        x = allowable_set[-1]    return [x == s for s in allowable_set]
def atom_features(atom):    return (torch.Tensor(onek_encoding_unk(atom.GetSymbol(), ELEM_LIST)             + onek_encoding_unk(atom.GetDegree(), [0,1,2,3,4,5])             + onek_encoding_unk(atom.GetFormalCharge(), [-1,-2,1,2,0])            + onek_encoding_unk(int(atom.GetChiralTag()), [0,1,2,3])            + [atom.GetIsAromatic()]))
def mol2dgl_single(mols):    """    inputs      mols: a list of molecules    outputs      cand_graphs: a list of dgl graphs    """    cand_graphs = []
    for mol in mols:        n_atoms = mol.GetNumAtoms()        g = DGLGraph()                node_feats = []        for i, atom in enumerate(mol.GetAtoms()):            assert i == atom.GetIdx()            node_feats.append(atom_features(atom))        g.add_nodes(n_atoms)        bond_src = []        bond_dst = []        for i, bond in enumerate(mol.GetBonds()):            a1 = bond.GetBeginAtom()            a2 = bond.GetEndAtom()            begin_idx = a1.GetIdx()            end_idx = a2.GetIdx()            bond_src.append(begin_idx)            bond_dst.append(end_idx)            bond_src.append(end_idx)            bond_dst.append(begin_idx)        g.add_edges(bond_src, bond_dst)
        g.ndata['h'] = torch.Tensor([a.tolist() for a in node_feats])        cand_graphs.append(g)    return cand_graphs

载入数据,转换smiles到分子图

代码语言:javascript
复制
smiles = ['OCCS(=O)(=O)c1no[n+]([O-])c1c2ccccc2', 'Cl.CCCC1(C)CC(=O)N(CCCCN2CCN(CC2)c3nsc4ccccc34)C(=O)C1']mols = []for sm in smiles:    mol = get_mol(sm)    mols.append(mol)graphs = mol2dgl_single(mols)

查看第一个分子的邻接矩阵

代码语言:javascript
复制
graphs[0].adjacency_matrix().to_dense()

输出领接矩阵的每个节点

代码语言:javascript
复制
for a in graphs[1].adjacency_matrix().to_dense():    print(a)

DGL 现已开源

  • 主页地址:http://dgl.ai
  • 项目地址:https://github.com/dmlc/dgl
  • 初学者教程:https://docs.dgl.ai/tutorials/basics/index.html
  • 所有示例模型的详细从零教程:https://docs.dgl.ai/tutorials/models/index.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DrugAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档