美文网首页
GCN图顶点分类理解

GCN图顶点分类理解

作者: 布口袋_天晴了 | 来源:发表于2019-11-15 17:20 被阅读0次

    GCN输出的H'矩阵,最后怎么令其作节点分类。即,GCN输出H’如何让节点分类的?

    以pytorch的GCN模型为例:GCN
    GCN已经将计算简化为:H^{l+1}=AH^{l}W
    假设一个图的顶点数目为:n

    import torch.nn as nn
    import torch.nn.functional as F
    from pygcn.layers import GraphConvolution
    
    
    class GCN(nn.Module):
        def __init__(self, nfeat, nhid, nclass, dropout):
            super(GCN, self).__init__()
    
            self.gc1 = GraphConvolution(nfeat, nhid)
            self.gc2 = GraphConvolution(nhid, nclass)
            self.dropout = dropout
    
        def forward(self, x, adj):
            x = F.relu(self.gc1(x, adj))  ###注:  X = AXW1  A=[n,n] X[n,nfeat]  W=[nfeat,nhid]  ==> X=[n,nhid]
            x = F.dropout(x, self.dropout, training=self.training)
            x = self.gc2(x, adj) ###注:X=AXW2  A=[n,n]  X=[n,nhid]  W=[nhid,nclass] ==> X=[n,nclass]
            return F.log_softmax(x, dim=1)
    

    代码里的x就是与公式里的H对应,x是图顶点的原始特征矩阵,x输入gc1层时的维度是:[n,nfeat],n是图节点数,nfeat是图节点原始特征的维度;

    第一次H^{1}=AH^{0}W计算,即X^{1}=AX^{0}W^{1},A矩阵维度[n,n],X矩阵就是x维度[n,nfeat],W^{1}变量维度[nfeat,nhid],所以X^{1}=[n,nhid]是新特征矩阵。

    第二次H^{2}=AH^{1}W计算,即X^{2}=AX^{1}W^{2},A矩阵维度[n,n],X矩阵就是x维度[n,nhid],W^{2}变量维度[nhid,nclass],所以X^{2}=[n,nclass]是新矩阵,它就对应nclass分类。

    后面return F.log_softmax(x, dim=1),即对分类上分数进行softmax归一化处理,即可以和真实的标签向量进行对标,计算损失值。

    相关文章

      网友评论

          本文标题:GCN图顶点分类理解

          本文链接:https://www.haomeiwen.com/subject/lxpsictx.html