2022年5月更新说明
用于开发图神经网络可解释性方法的合成数据集
我们添加了以下新数据集。BAShapeDataset
、BACommunityDataset
、TreeCycleDataset
和 TreeGridDataset
首次提出于 GNNExplainer:为图神经网络生成解释,用于节点分类。BA2MotifDataset
首次提出于 参数化图神经网络解释器,用于图分类。
# A dataset for node classification
from dgl.data import BAShapeDataset
dataset = BAShapeDataset()
num_classes = dataset.num_classes
graph = dataset[0]
feat = graph.ndata['feat']
label = graph.ndata['label']
# A dataset for graph classification
from dgl.data import BA2MotifDataset
dataset = BA2MotifDataset()
num_classes = dataset.num_classes
graph, label = dataset[0] # Get the first graph data
feat = graph.ndata['feat']
开发者建议: 这些合成图将特殊设计的子结构(motif)集成到传统的随机图模型中,并根据它们的存在分配标签。因此,这些子结构可作为节点/图标签的ground truth解释,使其成为评估图神经网络可解释性方法的常用基准。
SIGN扩散变换
我们添加了一个新的数据变换模块 SIGNDiffusion
,首次提出于 SIGN:可扩展的Inception图神经网络,它将节点特征进行扩散以供后续使用。它支持四种内置的扩散矩阵,包括原始邻接矩阵、随机游走邻接矩阵、对称归一化邻接矩阵和个性化PageRank矩阵。
import dgl
import dgl.transforms as T
dataset = dgl.data.CoraGraphDataset(
transform=T.SIGNDiffusion(k=2)) # Diffuse for 1 & 2 hops
g = dataset[0] # diffused node features will be generated as ndata
feat1 = g.ndata['out_feat_1'] # feature diffused for 1 hop
feat2 = g.ndata['out_feat_2'] # feature diffused for 2 hops
开发者建议: 学习聚合邻居信息的能力是消息传递神经网络的关键创新之一,然而随着探索更多跳数的邻居,感受野呈指数级增长,这也带来了可扩展性挑战。SIGN 提出了一种廉价而有效的解决方案,通过使用各种算法扩散输入节点特征,解耦了模型深度和感受野大小。由于扩散过程不可训练,我们将其打包为一个数据变换模块,以便用户可以在运行自己的模型之前轻松地插入 SIGN。
标签传播
我们添加了一个新的神经网络模块 LabelPropagation
,首次提出于 利用标签传播从未标记数据和已标记数据中学习,它在图上进行节点标签传播,用于推断未标记节点的标签。
import dgl
lp = dgl.nn.LabelPropagation(k=3, alpha=0.9)
dataset = dgl.data.CoraGraphDataset()
g = dataset[0]
labels = g.ndata['label']
train_mask = g.ndata['train_mask']
new_labels = lp(g, labels, train_mask)
开发者建议: 经典的标签传播是一种简单(非参数化)但有效的算法,使其成为许多节点分类数据集的强大基线。
方向图网络层
我们添加了一个新的神经网络模块 DGNConv
,首次提出于 方向图网络,它基于图拉普拉斯矩阵低频特征向量的梯度,在消息传递中引入了方向聚合器。
import dgl
import torch
g = ... # some graph
# Precompute 1 smallest non-trivial eigenvectors
transform = dgl.transforms.LaplacianPE(k=1)
g = transform(g)
x = torch.randn(g.num_nodes(), 10) # node features
eig = g.ndata['PE']
conv = dgl.nn.DGNConv(10, 10,
aggregators=['dir1-av', 'dir1-dx'],
scalers=['identity', 'amplification'],
delta=2.5)
h = conv(g, x, eig_vec=eig)
开发者建议: 方向图网络(DGN)允许根据拓扑导出的方向流来定义图卷积。它是许多图分类任务的最先进基线。
带边特征的图同构网络层
我们添加了一个新的神经网络模块 GINEConv
,首次提出于 预训练图神经网络的策略,它扩展了图同构网络(GIN)以处理边特征。
import dgl
import torch
g = ... # some graph
xn = torch.randn(g.num_nodes(), 10) # node features
xe = torch.randn(g.num_edges(), 10) # edge features
conv = dgl.nn.GINEConv(torch.nn.Linear(10, 10))
hn = conv(g, xn, xe)
开发者建议: 带边特征的图同构网络已成为许多图分类任务的重要基线,例如 OGB 图属性数据集。
特征掩码
我们添加了一个新的数据变换模块 FeatMask
,首次提出于 带有增强的图对比学习,它随机掩盖节点/边特征的列。
import dgl
import dgl.transforms as T
dataset = dgl.data.CoraGraphDataset(
transform=T.FeatMask(p=0.1, node_feat_names=['feat']))
g = dataset[0]
feat = g.ndata['feat'] # The node feature tensor has been randomly masked.
开发者建议: 随机掩盖特征的列是一种简单但有用的图对比学习数据增强方法。
特征的行归一化器
我们添加了一个新的数据变换模块 RowFeatNormalizer
,它执行特征的行归一化。
import dgl
import dgl.transforms as T
dataset = dgl.data.CoraGraphDataset(
transform=T.RowFeatNormalizer(node_feat_names=['feat']))
g = dataset[0]
feat = g.ndata['feat'] # The node feature tensor has been row-normalized.
开发者建议: 原始特征的行归一化是一个有用的数据预处理步骤。
如需深入阅读,请查阅 发布说明,以获取新增内容、改进和错误修复的完整列表。如果您对 DGL 或一般的图神经网络有疑问,欢迎加入我们的 Slack 频道。如果您对 DGL 的后续发展有具体建议,可以在我们的 Github 上提交,或填写此 调查问卷。
31 五月