dgl.readout_edges
- dgl.readout_edges(graph, feat, weight=None, *, op='sum', etype=None)[源码]
对
graph
中的边特征feat
进行求和,可选地乘以边权重weight
。该函数通常用作对一批图进行 readout 操作以生成图级表示。因此,结果张量的形状取决于输入图的批大小。给定一个批大小为
的图,特征大小为 ,结果形状将是 ,其中每一行是每个图的聚合边特征。- 参数:
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.])