dgl.function

dgl.function

dgl.function这个子包包含DGL提供的所有内置函数,用于定义消息传递和聚合的函数。这些函数在图神经网络中用来处理消息传递机制,即从节点及其邻居中收集和聚合信息。

DGL Built-in Function(DGL内置函数)

Category Functions
Unary message function copy_u, copy_e
u_add_v, u_sub_v, u_mul_v, u_div_v, u_dot_v
u_add_e, u_sub_e, u_mul_e, u_div_e, u_dot_e
Binary message function v_add_u, v_sub_u, v_mul_u, v_div_u, v_dot_u
v_add_e, v_sub_e, v_mul_e, v_div_e, v_dot_e
e_add_u, e_sub_u, e_mul_u, e_div_u, e_dot_u
e_add_v, e_sub_v, e_mul_v, e_div_v, e_dot_v
Reduce function max, min, sum, mean

Message functions(消息函数)

dgl.function.copy_u

内置消息函数,使用源节点特征计算消息。

Usage: dgl.function.copy_u(u, out)

Parameters:

  • u(str) 源节点特征字段
  • out(str) 输出的消息字段

Example:

1
2
import dgl
message_func = dgl.function.copy_u('h', 'm')
1
2
def message_func(edges):
return {'m': edges.src['h']}

dgl.function.copy_e

内置消息函数,使用边特征计算消息。

Usage: dgl.function.copy_e(e, out)

Parameters:

  • e(str) 边特征字段
  • out(str) 输出的消息字段

Example:

1
2
import dgl
message_func = dgl.function.copy_e('h', 'm')
1
2
def message_func(edges):
return {'m': edges.data['h']}

dgl.function.u_add_v

内置的消息函数,如果特征具有相同的形状,则通过在u和v的特征之间执行逐元素相加来计算边缘上的消息;
否则,它首先将特征广播到新的形状并执行逐元素操作。

Usage: dgl.function.u_add_v(lhs_field, rhs_field, out)

Parameters:

  • lhs_field(str) u的特征字段
  • rhs_field(str) v的特征字段
  • out(str) 输出的消息字段

Example:

1
2
import dgl
message_func = dgl.function.u_add_v('h', 'h', 'm')

dgl.function.u_sub_v

内置的消息函数,如果特征具有相同的形状,则通过在u和v的特征之间执行逐元素相减来计算边缘上的消息;
否则,它首先将特征广播到新的形状并执行逐元素操作。

Usage: dgl.function.u_sub_v(lhs_field, rhs_field, out)

Parameters:

  • lhs_field(str) u的特征字段
  • rhs_field(str) v的特征字段
  • out(str) 输出的消息字段

Example:

1
2
import dgl
message_func = dgl.function.u_sub_v('h', 'h', 'm')

dgl.function.u_mul_v

内置的消息函数,如果特征具有相同的形状,则通过在u和v的特征之间执行逐元素相乘来计算边缘上的消息;
否则,它首先将特征广播到新的形状并执行逐元素操作。

Usage: dgl.function.u_mul_v(lhs_field, rhs_field, out)

Parameters:

  • lhs_field(str) u的特征字段
  • rhs_field(str) v的特征字段
  • out(str) 输出的消息字段

Example:

1
2
import dgl
message_func = dgl.function.u_mul_v('h', 'h', 'm')

dgl.function.u_div_v

内置的消息函数,如果特征具有相同的形状,则通过在u和v的特征之间执行逐元素相除来计算边缘上的消息;
否则,它首先将特征广播到新的形状并执行逐元素操作。

Usage: dgl.function.u_div_v(lhs_field, rhs_field, out)

Parameters:

  • lhs_field(str) u的特征字段
  • rhs_field(str) v的特征字段
  • out(str) 输出的消息字段

Example:

1
2
import dgl
message_func = dgl.function.u_div_v('h', 'h', 'm')

Reduce functions(规约函数)

dgl.function.sum

内置reduce函数,按总和聚合消息

Usage: dgl.function.sum(msg, out)

Parameters:

  • msg(str) 消息字段
  • out(str) 输出的节点特征字段

Example:

1
2
import dgl
reduce_func = dgl.function.sum('m', 'h')
1
2
3
import torch
def reduce_func(nodes):
return {'h': torch.sum(nodes.mailbox['m'], dim=1)}

dgl.function.max

内置reduce函数,以最大值聚合消息。

Usage: dgl.function.max(msg, out)

Parameters:

  • msg(str) 消息字段
  • out(str) 输出的节点特征字段

Example:

1
2
import dgl
reduce_func = dgl.function.max('m', 'h')
1
2
3
import torch
def reduce_func(nodes):
return {'h': torch.max(nodes.mailbox['m'], dim=1)}

dgl.function.min

内置reduce函数,以最小值聚合消息。

Usage: dgl.function.min(msg, out)

Parameters:

  • msg(str) 消息字段
  • out(str) 输出的节点特征字段

Example:

1
2
import dgl
reduce_func = dgl.function.min('m', 'h')
1
2
3
import torch
def reduce_func(nodes):
return {'h': torch.min(nodes.mailbox['m'], dim=1)}

dgl.function.mean

内置reduce函数,以平均值聚合消息。

Usage: dgl.function.mean(msg, out)

Parameters:

  • msg(str) 消息字段
  • out(str) 输出的节点特征字段

Example:

1
2
import dgl
reduce_func = dgl.function.mean('m', 'h')
1
2
3
import torch
def reduce_func(nodes):
return {'h': torch.mean(nodes.mailbox['m'], dim=1)}

参考资料


dgl.function
http://jiqingjiang.github.io/p/70a6638/
作者
Jiqing
发布于
2024年7月19日
许可协议