在使用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 v0.2只支持copy_src, copy_edge, src_mul_edge等几种。DGL v0.3仍然支持这些并扩展了更多组合。以下是一个简单的示例代码。 importdglimportdgl.functionasfnimporttorchasthg=...# create a DGLGraphg.ndata['h']=th.randn((g.number_of_nodes(),10))# each node has feature size 10g.edata['...
2.1 内置函数和消息传递API 消息函数接受一个参数edges,这是一个EdgeBatch的实例, 在消息传递时,它被DGL在内部生成以表示一批边。edges有src、dst和data共3个成员属性, 分别用于访问源节点、目标节点和边的特征 聚合函数接受一个参数nodes,这是一个NodeBatch的实例, 在消息传递时,它被DGL在内部生成以表示一批节点。
G.update_all(fn.copy_src('h', 'm'), fn.sum('m', 'h')) 图注意力模型 Graph Attention Network (GAT) 则可以用 src_mul_edge 内建消息函数和 sum内建累和函数组合实现: # 这里假设注意力分数为边上特征eG.update_all(fn.src_mul_edge('h', 'e', 'm'), fn.sum('m', 'h')) DGL ...
G.update_all(fn.copy_src('h','m'),fn.sum('m','h')) 图注意力模型 Graph Attention Network (GAT) 则可以用 src_mul_edge 内建消息函数和 sum内建累和函数组合实现: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 # 这里假设注意力分数为边上特征eG.update_all(fn.src_mul_edge('h','...
EdgeDataLoader 以小批次的形式对一组边进行迭代, 从而产生包含边小批次的子图以及供下文中模块使用的 块。 例如,以下代码创建了一个 PyTorch 数据加载器,该 PyTorch 数据加载器以批的形式迭代训练边 ID 的数组 train_eids,并将生成的块列表放到 GPU 上。 dataloader = dgl.dataloading.EdgeDataLoader( g, ...
copy_src alias of copy_u copy_edge alias of copy_e Binary message function u_add_v, u_sub_v, u_mul_v, u_div_v u_add_e, u_sub_e, u_mul_e, u_div_e v_add_u, v_sub_u, v_mul_u, v_div_u v_add_e, v_sub_e, v_mul_e, v_div_e e_add_u, e_sub_u, e...
G.update_all(fn.copy_src('h', 'm'), fn.sum('m', 'h')) 图注意力模型 Graph Attention Network (GAT) 则可以用 src_mul_edge 内建消息函数和 sum内建累和函数组合实现: # 这里假设注意力分数为边上特征e G.update_all(fn.src_mul_edge('h', 'e', 'm'), fn.sum('m', 'h')) ...
消息函数(message function):传递消息的目的是将节点计算时需要的信息传递给它,因此对每条边来说,每个源节点将会将自身的Embedding(e.src.data)和边的Embedding(edge.data)传递到目的节点;对于每个目的节点来说,它可能会受到多个源节点传过来的消息,它会将这些消息存储在"邮箱"中。
在DGL中每条关系使用三元组来表示(source node type, edge type, destination node type) >>>importdgl>>>importtorchasth>>># Create a heterograph with 3 node types and 3 edges types.>>>graph_data = {...('drug','interacts','drug'): (th.tensor([0,1]), th.tensor([1,2])),...('...