1 引言
在使用dgl定义的message passing函数时,经常使用如dgl.function.copy_u、dgl.function.copy_src和dgl.function.copy_e函数。这些函数的底层一般是用edges.src/edges.dst/edges.data实现,下面介绍一下这三个函数及其应用。
2 函数介绍
消息函数:接受一个参数 edges,这是一个 dgl.EdgeBatch 的实例, 在消息传递时,它被DGL在内部生成以表示一批边。edges有三个成员属性:src、dst和data,分别用于访问源节点、目标节点和边的特征。
2.1 E.g. dgl.function.copy_u
# Builtin message function that computes message
# using source node feature.
import dgl
message_func = dgl.function.copy_u('h', 'm')
# 这两个函数是等价的,访问源节点特征,并且存到m中
def message_func(edges):
return {'m': edges.src['h']} # 访问边对于的源节点特征
2.2 E.g. dgl.function.copy_e
# Builtin message function that computes
# message using edge feature.
import dgl
message_func = dgl.function.copy_e('h', 'm')
# 这两个函数等价,用边的特征计算消息传递
def message_func(edges):
return {'m': edges.data['h']} # 访问边的特征