dgl.DGLGraph.prop_edges

DGLGraph.prop_edges(edges_generator, message_func, reduce_func, apply_node_func=None, etype=None)[source]

通过在边上按顺序触发 send_and_recv() 来使用图遍历传播消息。

遍历顺序由 edges_generator 指定。它生成边前沿(edge frontiers)。边前沿应为*有效的边类型*。有关更多详细信息,请参阅 send()

同一前沿中的边将一起被触发,不同前沿中的边将按照生成顺序被触发。

参数:
  • edges_generator (generator) – 边前沿的生成器。

  • message_func (dgl.function.BuiltinFunction or callable) – 用于沿边生成消息的消息函数。它必须是 DGL 内置函数用户自定义函数

  • reduce_func (dgl.function.BuiltinFunction or callable) – 用于聚合消息的归约函数。它必须是 DGL 内置函数用户自定义函数

  • apply_node_func (callable, optional) – 消息归约后用于进一步更新节点特征的可选应用函数。它必须是 用户自定义函数

  • etype (str or (str, str, str), optional) –

    边的类型名称。允许的类型名称格式为

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

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

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

示例

>>> import torch
>>> import dgl
>>> import dgl.function as fn

实例化一个异构图并执行多轮消息传递。

>>> g = dgl.heterograph({('user', 'follows', 'user'): ([0, 1, 2, 3], [2, 3, 4, 4])})
>>> g.nodes['user'].data['h'] = torch.tensor([[1.], [2.], [3.], [4.], [5.]])
>>> g['follows'].prop_edges([[0, 1], [2, 3]], fn.copy_u('h', 'm'),
...                         fn.sum('m', 'h'), etype='follows')
>>> g.nodes['user'].data['h']
tensor([[1.],
        [2.],
        [1.],
        [2.],
        [3.]])

另请参阅

prop_nodes