遥不可及|如何在图上进行卷积网络的深度学习(一)( 三 )


现在我们来构建这个图卷积网络 。 实际上 , 我们不会训练网络 , 而只是随机初始化它来生成我们在本文开头看到的特征表示 。 我们将使用networkx , 它有一个现成的俱乐部的图形表示 , 并很容易计算A_hat和D_hat矩阵 。
fromnetworkximportkarate_club_graph,to_numpy_matrixzkc=karate_club_graph()order=sorted(list(zkc.nodes()))A=to_numpy_matrix(zkc,nodelist=order)I=np.eye(zkc.number_of_nodes())A_hat=A+ID_hat=np.array(np.sum(A_hat,axis=0))[0]D_hat=np.matrix(np.diag(D_hat))接下来 , 我们随机初始化权值 。
W_1=np.random.normal(loc=0,scale=1,size=(zkc.number_of_nodes(),4))W_2=np.random.normal(loc=0,size=(W_1.shape[1],2))堆叠GCN层 。 这里我们只使用单位矩阵作为特征表示 , 即每个节点都表示为一个类别变量的独热编码 。
defgcn_layer(A_hat,D_hat,X,W):returnrelu(D_hat**-1*A_hat*X*W)H_1=gcn_layer(A_hat,D_hat,I,W_1)H_2=gcn_layer(A_hat,D_hat,H_1,W_2)output=H_2我们提取特征表示 。
feature_representations={node:np.array(output)[node]fornodeinzkc.nodes()}看!在Zachary的空手道俱乐部中 , 特征表示可以很好的将社区分开 。 我们还没开始训练呢!
结论在这篇文章中 , 我对图卷积网络做了一个高层次的介绍 , 并说明了GCN中每一层节点的特征表示是如何基于其邻域来进行聚合的 。 我们看到了如何使用numpy来构建这些网络 , 以及它们是多么强大:即使是随机初始化的GCNs也可以在Zachary的空手道俱乐部中分隔社区 。
英文原文: