【图机器学习】GCN源码中的邻接矩阵的构建

1 代码

edges = np.array(list(map(idx_map.get, edges_unordered.flatten())),
                 dtype=np.int32).reshape(edges_unordered.shape)
adj = sp.coo_matrix((np.ones(edges.shape[0]), (edges[:, 0], edges[:, 1])),
                    shape=(labels.shape[0], labels.shape[0]),
                    dtype=np.float32)

# build symmetric adjacency matrix
adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)

features = normalize(features)
adj = normalize(adj + sp.eye(adj.shape[0]))

  在上述代码中比较难理解的就是构建对称的邻接矩阵那一句,因为在一般的图神经网络模型中,输入的图是无向图所以邻接矩阵是对称矩阵。特别是如果自己构建KNN图的话,对称矩阵这个地方一定要注意。

上述代码的具体解释可以看参考文献,这里不多赘述。需要注意的是构建邻接矩阵是否只有这一种方法?其实不然,最简单的操作是矩阵 A A A加上矩阵 A T A^T AT但是这种方法有一定局限性,如果矩阵是一个加权的并不是0,1矩阵,或者矩阵本身就存在对称的元素,直接相加就会存在问题。所以使用上述的代码会避免存在的问题。

2 参考文献

[1]关于pytorch GCN 源码中的邻接矩阵的解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值