CuGraphRelGraphConv
- class dgl.nn.pytorch.conv.CuGraphRelGraphConv(in_feat, out_feat, num_rels, regularizer=None, num_bases=None, bias=True, self_loop=True, dropout=0.0, apply_norm=False)[source]
基类:
CuGraphBaseConv
一个加速的关系图卷积层,来自Modeling Relational Data with Graph Convolutional Networks,它利用了 cugraph-ops 中高度优化的聚合原语。
有关数学模型,请参阅
dgl.nn.pytorch.conv.RelGraphConv
。此模块依赖于
pylibcugraphops
包,可以通过conda install -c nvidia pylibcugraphops=23.04
安装。pylibcugraphops
23.04 需要 python 3.8.x 或 3.10.x。注意
这是一个实验性功能。
- 参数:
in_feat (int) – 输入特征大小。
out_feat (int) – 输出特征大小。
num_rels (int) – 关系类型数量。
regularizer (str, 可选) –
- 要使用的权重正则化器(“basis” 或
None
) “basis” 用于基分解。
None
表示不应用正则化。
默认值:
None
。- 要使用的权重正则化器(“basis” 或
num_bases (int, 可选) – 基的数量。当应用正则化器时生效。默认值:
None
。bias (bool, 可选) – 如果添加偏置,则为 True。默认值:
True
。self_loop (bool, 可选) – 如果包含自环消息,则为 True。默认值:
True
。dropout (float, 可选) – Dropout 率。默认值:
0.0
。apply_norm (bool, 可选) – 如果按每个边类型的目标节点的入度(即 \(|\mathcal{N}^r_i|\))归一化聚合输出,则为 True。默认值:
True
。
示例
>>> import dgl >>> import torch >>> from dgl.nn import CuGraphRelGraphConv ... >>> device = 'cuda' >>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3])).to(device) >>> feat = torch.ones(6, 10).to(device) >>> conv = CuGraphRelGraphConv( ... 10, 2, 3, regularizer='basis', num_bases=2).to(device) >>> etype = torch.tensor([0,1,2,0,1,2]).to(device) >>> res = conv(g, feat, etype) >>> res tensor([[-1.7774, -2.0184], [-1.4335, -2.3758], [-1.7774, -2.0184], [-0.4698, -3.0876], [-1.4335, -2.3758], [-1.4331, -2.3295]], device='cuda:0', grad_fn=<AddBackward0>)
- forward(g, feat, etypes, max_in_degree=None)[source]
前向计算。
- 参数:
g (DGLGraph) – 图。
feat (torch.Tensor) – 节点特征的二维张量。形状: \((|V|, D_{in})\)。
etypes (torch.Tensor) – 边类型的一维整数张量。形状: \((|E|,)\)。请注意,cugraph-ops 只接受 int32 类型的边类型张量,因此任何其他整数类型的输入都将被转换为 int32,这会引入一些开销。直接传递 int32 张量以获得最佳性能。
max_in_degree (int, 可选) – 目标节点的最大入度。仅当
g
是DGLBlock
(即二分图)时有效。当g
是由邻居采样器生成时,该值应设置为相应的fanout
。如果未给出,则max_in_degree
将会即时计算。
- 返回值:
新的节点特征。形状: \((|V|, D_{out})\)。
- 返回类型:
torch.Tensor