本文对 dgl 的卷积方式 RelGraphConv 说明文档进行翻译。
译者注: RelGraphConv 关系图卷积方式是在 GraphConv 图卷积方式上的改进,解决了 GraphConv 无法考虑到图中具有不同属性的边的问题,使用 RelGraphConv 可以同时汇聚边信息和结点信息。
RelGraphConv
class dgl.nn.pytorch.conv.RelGraphConv(
in_feat,
out_feat,
num_rels,
regularizer=None,
num_bases=None,
bias=True,
activation=None,
self_loop=True,
dropout=0.0,
layer_norm=False)
关系图卷积层 来自于用图卷积网络对关系数据进行建模。
它可以用以下方式描述。
h
i
(
l
+
1
)
=
σ
(
∑
r
∈
R
∑
j
∈
N
r
(
i
)
ϵ
j
,
i
W
r
(
l
)
h
j
(
l
)
+
W
0
(
l
)
h
i
(
l
)
)
h_{i}^{(l+1)}=\sigma(\sum_{r\in\mathcal{R}}\sum_{j\in\mathcal{N}^{r}(i)}\epsilon_{j,i}W_{r}^{(l)}h_{j}^{(l)}+W_{0}^{(l)}h_{i}^{(l)})
hi(l+1)=σ(r∈R∑j∈Nr(i)∑ϵj,iWr(l)hj(l)+W0(l)hi(l))
N
r
(
i
)
\mathcal{N}^r(i)
Nr(i) 代表结点
i
i
i 关于关系
r
r
r 的邻域集合。
e
j
,
i
e_{j,i}
ej,i 是归一化系数。
σ
\sigma
σ 是激活函数。
W
0
W_0
W0 是自环权重。
基础正则化通过以下方式分解了
W
r
W_r
Wr:
W
r
(
l
)
=
∑
b
=
1
B
a
r
b
(
l
)
V
b
(
l
)
W_{r}^{(l)}=\sum_{b=1}^{B}a_{r b}^{(l)}V_{b}^{(l)}
Wr(l)=b=1∑Barb(l)Vb(l)
B
B
B 代表基的个数,
V
b
(
l
)
V_b^{(l)}
Vb(l) 和系数
a
r
b
(
l
)
a_{rb}^{(l)}
arb(l)线性组合。
块对角线分解正则化将
W
r
W_r
Wr分解为
B
B
B个块对角线矩阵。我们称
B
B
B为基数。
块状正则化通过以下方式分解了
W
r
W_r
Wr:
W
r
(
l
)
=
⊕
b
=
1
B
Q
r
b
(
l
)
W_{r}^{(l)}=\oplus_{b=1}^{B}Q_{r b}^{(l)}
Wr(l)=⊕b=1BQrb(l)
其中 B B B是基数, Q r b ( l ) Q^{(l)}_{rb} Qrb(l)是形状为 R ( d ( l + 1 ) B ) ∗ ( d l / B ) R^{(d^{(l+1)}B)*(d^{l}/B)} R(d(l+1)B)∗(dl/B)的块基。
参数:
in_feat (int) – 输入特征大小;即 h j ( l ) h^{(l)}_j hj(l)的维数。
out_feat (int) – 输出特征大小;即 h i ( l + 1 ) h^{(l+1)}_i hi(l+1)的维数。
num_rels (int) – 关系的数量。
regularizer (str, optional) –使用哪种权重正则器 "basis "或 “bdd”。
"basis "是basis-decomposition的缩写。
"bdd "是块对角线分解的简称。
默认情况下不使用正则化。
num_bases (int, optional) – 基数的数量。在指定regularizer时需要。默认值:None。
bias (bool, optional) – 如果添加了偏置,则为True。默认情况下。为True。
activation (callable, optional) – 激活函数。默认情况下:None。
self_loop (bool, optional) – True:包括自环信息。默认值:为True。
dropout (float, optional) – Dropout 率. 默认: 0.0
layer_norm (float, optional) – 添加 layer norm. 默认: False
例子
import dgl
import numpy as np
import torch as th
from dgl.nn import RelGraphConv
g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3]))
feat = th.ones(6, 10)
conv = RelGraphConv(10, 2, 3, regularizer='basis', num_bases=2)
etype = th.tensor([0,1,2,0,1,2])
res = conv(g, feat, etype)
res
tensor([[ 0.3996, -2.3303],
[-0.4323, -0.1440],
[ 0.3996, -2.3303],
[ 2.1046, -2.8654],
[-0.4323, -0.1440],
[-0.1309, -1.0000]], grad_fn=<AddBackward0>)
前向计算
参数
g (DGLGraph) – 图.
feat (torch.Tensor) – 节点特征的二维张量。形状: ( ∣ V ∣ , D i n ) (|V|,D_{in}) (∣V∣,Din).
etypes (torch.Tensor or list[int]) – 一个边类型的一维整数张量。形状: ( ∣ E ∣ , ) (|E|,) (∣E∣,).
norm (torch.Tensor, optional) –边规范值的一维张量。形状: ( ∣ E ∣ , ) (|E|,) (∣E∣,).
presorted (bool, optional) – 输入图的边是否已按其类型进行了排序。在预先排序的图上进行前向传播可能会更快。由to_homogeneous()创建的图自动满足该条件。也可以参考reorder_graph()来手动排序边
返回值
新的节点特征。形状: ( ∣ V ∣ , D o u t ) (|V|,D_{out}) (∣V∣,Dout).
返回类型
torch.Tensor
813

被折叠的 条评论
为什么被折叠?



