dgl.readout_edges

dgl.readout_edges(graph, feat, weight=None, *, op='sum', etype=None)[源码]

graph 中的边特征 feat 进行求和,可选地乘以边权重 weight

该函数通常用作对一批图进行 readout 操作以生成图级表示。因此,结果张量的形状取决于输入图的批大小。给定一个批大小为 B 的图,特征大小为 D,结果形状将是 (B,D),其中每一行是每个图的聚合边特征。

参数:
  • graph (DGLGraph.) – 输入图。

  • feat (str) – 边特征的名称。

  • weight (str, 可选) – 边权重特征的名称。如果为 None,则不进行权重加权,否则,在求和时使用字段 feat 对每个边特征进行加权。权重特征的形状必须与特征张量进行元素级乘法兼容。

  • op (str, 可选) – Readout 操作符。可以是 ‘sum’、‘max’、‘min’、‘mean’。

  • etype (str or (str, str, str), 可选) –

    边的类型名称。允许的类型名称格式有:

    • (str, str, str),分别表示源节点类型、边类型和目标节点类型。

    • 或者一个 str 边类型名称,如果该名称可以在图中唯一标识一个三元组格式。

    如果图只有一种边类型,则可以省略此参数。

返回值:

结果张量。

返回类型:

Tensor

示例

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

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

>>> g1 = dgl.graph(([0, 1], [1, 0]))              # Graph 1
>>> g1.edata['h'] = th.tensor([1., 2.])
>>> g2 = dgl.graph(([0, 1], [1, 2]))              # Graph 2
>>> g2.edata['h'] = th.tensor([2., 3.])

对一个图求和

>>> dgl.readout_edges(g1, 'h')
tensor([3.])  # 1 + 2

对批处理图求和

>>> bg = dgl.batch([g1, g2])
>>> dgl.readout_edges(bg, 'h')
tensor([3., 5.])  # [1 + 2, 2 + 3]

加权求和

>>> bg.edata['w'] = th.tensor([.1, .2, .1, .5])
>>> dgl.readout_edges(bg, 'h', 'w')
tensor([.5, 1.7])

按最大值进行 Readout

>>> dgl.readout_edges(bg, 'w', op='max')
tensor([2., 3.])

另见

readout_nodes