DeepChem教程 6:图卷积
本教程我们学习更多的“图卷积”。处理分子数据有一个最为强大的深度学习工具。原因是分子可以很自然的看作图。注意,这类的标准的化学图形我们从高中就开始用于可视化分子作为图。在本教程的后一部分,我们将更详细的探求这种关系。我们将更深入的理解这些系统是如何工作的。
什么是图卷积?
考虑一下一种常用于处理图像的标准的卷积神经网络。每个像素有一个矢量数值,如红、绿、蓝通道值。数据传递给一系列的卷积层。每一层组合数据自像素及它的邻居以产生新的像素的矢量数据。早期的层检测局部的模式,后期的层检测更大的更抽象的模式。通常卷积层随池化层改变,池化层进行一些局部区域的最大最小化之类的操作。
图卷积相似,但是它们对图操作。它们从图上的节点的矢量数据开始(如,节点代表的原子的化学特征)。卷积和池化层组合信息自相连的节点(如,相结合的原子)以为每个节点产生新的数据矢量。
训练GraphConvModel
让我们来使用MoleculeNet加载Tox21数据集。为了特征化数据以便图卷积神经网络使用,我们设置特征化器选项为'GraphConv'。MoleculeNet的调用返回训练集、验证集、测试集供我们使用。它也返回tasks,即任务名的列表,也返回transformers,数据转换器的列表,用于处理数据集。(通常大部分深度网络都是挑剔的,需要一系列的数据转换过程以保证训练过程的稳定性。)
In [1]:
import deepchem as dc
tasks, datasets, transformers = dc.molnet.load_tox21(featurizer='GraphConv')
train_dataset, valid_dataset, test_dataset = datasets
现在我们用这个数据集来训练图卷积网络。DeepChem有一个GraphConvModel类打包标准的图卷积结构方便用户使用。我们来实例化类的对象并用我们的数据集来训练。
In [2]:
n_tasks = len(tasks)
model = dc.models.GraphConvModel(n_tasks, mode='classification')
model.fit(train_dataset, nb_epoch=50)
Out[2]:
0.28185401916503905
我们来评估一下我们训练的模型的性能。对于这个,我们需要确定一个度量来衡量模型的性能。dc.metrics 已经存贮了一系列的量度。对于这个数据集,使用ROC-AUC是标准,即接受者操作特征曲线下的面积(它测量了精确度和召回之间接妥协)。幸运的是,DeepChem已有ROC-AUC分可用。为了测量模型在这个量度下的性能,我们使用便利的函数 model.evaluate()。
In [3]:
metric = dc.metrics.Metric(dc.metrics.roc_auc_score)
print('Training set score:', model.evaluate(train_dataset, [metric], transformers))