文章目录
1. 对称归一化 D − 1 2 A D − 1 2 D^{-\frac{1}{2}}AD^{-\frac{1}{2}} D−21AD−21
代码参考自R-former:
def normalize_adj(adj):
"""Symmetrically normalize adjacency matrix."""
rowsum = np.array(adj.sum(1))
with np.errstate(divide='ignore'):
d_inv_sqrt = np.power(rowsum, -0.5).flatten()
d_inv_sqrt[np.isinf(d_inv_sqrt)] = 0.
d_mat_inv_sqrt = np.diag(d_inv_sqrt)
return adj.dot(d_mat_inv_sqrt).transpose().dot(d_mat_inv_sqrt)
2. D − 1 A D^{-1}A D−1A
代码参考自GL-GIN:
def normalize_adj(mx):
"""
Row-normalize matrix D^{-1}A
torch.diag_embed: https://github.com/pytorch/pytorch/pull/12447
"""
mx = mx.float()
rowsum = mx.sum(2)
r_inv = torch.pow(rowsum, -1)
r_inv[torch.isinf(r_inv)] = 0.
r_mat_inv = torch.diag_embed(r_inv, 0)
mx = r_mat_inv.matmul(mx)
return mx