在DGL中实现一个合成数据集data.MiniGCDataset。数据集有八种不同类型的图,每个类都有相同数量的图样本。
形成图形小批量
为了有效地训练神经网络,通常的做法是将多个样本批处理在一起形成一个小批量。批处理固定形状张量输入是常见的。例如,对大小为28x 28的两个图像进行批处理,得到形状为2x28x28的张量。相比之下,批处理图形输入有两个挑战:
- 图是稀疏的。
- 图可以有不同的长度。例如,节点和边的数量。
为了解决这个问题,DGL提供了一个DGL.batch()API。它利用了这样的思想:一批图可以被看作是一个具有许多不相连的连接组件的大型图。下面是一个给出了总体思路的可视化。
定义以下collate函数,从给定的图形和标签对列表中形成一个小批。
dgl.batch()的返回类型仍然是一个图形。同样,一批张量仍然是张量。这意味着对一个图有效的任何代码都会立即对一批图有效。更重要的是,由于DGL并行处理所有节点和边上的消息,这大大提高了效率。
从一批图中,执行消息传递和图卷积,以便节点与其他节点通信。在消息传递之后,从节点(和边)属性计算一个张量来表示图。这个步骤可以称为读出或聚集。最后,将图的表示形式输入到分类器g中,以预测图的标签。
图卷积层可以在dgl.nn.子模块中找到。
对于本演示,将初始节点特征视为它们的度。在两轮图形卷积之后,通过对批处理中的每个图形的所有节点特征进行平均来执行图形读出。
在DGL中,DGL.mean_nodes()处理一批大小可变的图的此任务。然后将图形表示输入到具有一个线性层的分类器中,以获得pre-softmax logits。
创建一个包含400个10~20个节点的图的合成数据集。320图构成训练集,80图构成测试集。
学习曲线如下所示。
训练模型在创建的测试集上进行评估。要部署教程,请限制运行时间以获得比下面打印的更高的精度(80%~90%)。
这里的动画描绘了一个经过训练的模型预测正确图形类型的概率。
为了理解训练模型学习到的节点和图形表示,我们使用t-SNE进行降维和可视化。
顶部的两个小图形分别在一层和两层图形卷积后显示节点表示。底部的图将图形的pre-softmax登录可视化为图形表示。
虽然可视化确实显示了节点特性的一些聚类效果,但您不会期望得到完美的结果。对于这些节点特征,节点度是确定的。分离后的图形特征得到了改进。
接下来是什么?
利用图神经网络进行图分类仍然是一个新的研究领域。它在等待人们带来更多令人兴奋的发现。这项工作需要将不同的图映射到不同的嵌入,同时在嵌入空间中保持它们的结构相似性。要了解更多信息,请看图形神经网络有多强大?为2019年国际学习代表大会发表的研究论文。