GCN代码阅读

y_train: 保留0-140,其余部份设置为0;

y_val: 保留141-639,其余部份设置为0;

y_test: 保留1708-2707,其余部份设置为0;

def sparse_to_tuple方法,mx.row, mx.col表示非0 元素 在稀疏矩阵中的坐标,非0元素通过以下三个变量进行描述:coords,values和shape,sparse_mx(coords, values, shape)为tuple。

直接定位到sparse_mx = to_tuple(sparse_mx)这一行再看to_tuple,实际上是将原来的feature从 csr_matrix转化为 coo_matrix,并且输出特征向量coords, values, shape(有值位置的坐标,值,特征向量的shape)三要素作为元组。这里有两个矩阵,分别是 近接矩阵节点特性向量矩阵,由于这两个都是1,0稀疏格式因此采用scipy的稀疏矩阵格式,其中 邻接矩阵采用 csr_matrix方便计算对称归一化,而 特征矩阵采用的是先lil_matrix方便做行切片,最后转化为 coo_matrix,原因是特征矩阵需要使用占位符 placeholder传入模型内部,而邻接矩阵是全局共享不变的不需要占位符,而稀疏站位符 tf.sparse_placeholder的格式是(行列索引,值,shape)和coo_matrix对应,因此代码中最后转化为coo_matrix。

def preprocess_features(features)对节点的特征向量做行L1归一化,每一行的和是1,具体实现是创建了一个每一行和的倒数的对角矩阵乘以特征向量,sparse_to_tuple(features)最终数据类型与sparse_mx相同。

def chebyshev_polynomials(adj, k):
“””Calculate Chebyshev polynomials up to order k. Return a list of sparse matrices (tuple representation).”””
print(“Calculating Chebyshev polynomials up to order {}…”.format(k))

adj_normalized = normalize_adj(adj)

laplacian = sp.eye(adj.shape[0]) – adj_normalized

largest_eigval, _ = eigsh(laplacian, 1, which = ‘LM’)

scaled_laplacian = (2. / largest_eigval[0]) * laplacian – sp.eye(adj.shape[0])

t_k = list()
t_k.append(sp.eye(adj.shape[0]))
t_k.append(scaled_laplacian)

def chebyshev_recurrence(t_k_minus_one, t_k_minus_two, scaled_lap):

s_lap = sp.csr_matrix(scaled_lap, copy = True)

return 2 * s_lap.dot(t_k_minus_one) – t_k_minus_two

for i in range(2, k+1):

t_k.append(chebyshev_recurrence(t_k[-1], t_k[-2], scaled_laplacian))

return sparse_to_tuple(t_k)

t_k为list类型,size为4。t_k[0]为单位矩阵I,t_k[1]为经过变换的拉普拉斯矩阵,t_k[2]与t_k[3]分别为卷积核。

Original: https://www.cnblogs.com/irikin/p/16281585.html
Author: Link0216
Title: GCN代码阅读

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/567598/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球