dgl.broadcast_edges

dgl.broadcast_edges(graph, graph_feat, *, etype=None)[source]

生成一个与图级别特征 graph_feat 相等的边特征。

此操作类似于 numpy.repeat (或 torch.repeat_interleave)。它通常用于通过全局向量归一化边特征。例如,将图中边特征归一化到范围 \([0~1)\)

>>> g = dgl.batch([...])  # batch multiple graphs
>>> g.edata['h'] = ...  # some node features
>>> h_sum = dgl.broadcast_edges(g, dgl.sum_edges(g, 'h'))
>>> g.edata['h'] /= h_sum  # normalize by summation
参数:
  • graph (DGLGraph) – 图。

  • graph_feat (tensor) – 要广播的特征。对于批处理图,张量形状为 \((B, *)\),其中 \(B\) 是批处理大小。

  • etype (str, typle of str, optional) – 边类型。如果图中只有一种边类型,则可以省略。

返回:

形状为 \((M, *)\) 的边特征张量,其中 \(M\) 是边的数量。

返回类型:

张量

示例

>>> import dgl
>>> import torch as th

创建两个 DGLGraph 对象并初始化它们的边特征。

>>> g1 = dgl.graph(([0], [1]))                    # Graph 1
>>> g2 = dgl.graph(([0, 1], [1, 2]))              # Graph 2
>>> bg = dgl.batch([g1, g2])
>>> feat = th.rand(2, 5)
>>> feat
tensor([[0.4325, 0.7710, 0.5541, 0.0544, 0.9368],
        [0.2721, 0.4629, 0.7269, 0.0724, 0.1014]])

将特征广播到批处理图中的所有边,feat[i] 广播到批处理中第 i 个示例中的边。

>>> dgl.broadcast_edges(bg, feat)
tensor([[0.4325, 0.7710, 0.5541, 0.0544, 0.9368],
        [0.2721, 0.4629, 0.7269, 0.0724, 0.1014],
        [0.2721, 0.4629, 0.7269, 0.0724, 0.1014]])

将特征广播到单个图中的所有边(要广播的特征张量形状应为 \((1, *)\))。

>>> feat1 = th.unsqueeze(feat[1], 0)
>>> dgl.broadcast_edges(g2, feat1)
tensor([[0.2721, 0.4629, 0.7269, 0.0724, 0.1014],
        [0.2721, 0.4629, 0.7269, 0.0724, 0.1014]])

另请参阅

broadcast_nodes