使用DGL grahSAGE的GNN结果的可重复性

问题描述

我正在使用graphSAGE处理节点分类问题。我是GNN的新手,所以我的代码基于带有DGL的GraphSAGE教程,用于分类任务[1][2]。这是我正在使用的代码,它的归类大小为20且输出大小为2(二进制分类问题)的3层GNN:

class GraphSAGE(nn.Module):
    def __init__(self,in_feats,n_hidden,n_classes,n_layers,activation,dropout,aggregator_type):
        super(GraphSAGE,self).__init__()
        self.layers = nn.ModuleList()
        self.dropout = nn.Dropout(dropout)
        self.activation = activation

        self.layers.append(dglnn.SAGEConv(in_feats,aggregator_type))
        for i in range(n_layers - 1):
            self.layers.append(dglnn.SAGEConv(n_hidden,aggregator_type))
        self.layers.append(dglnn.SAGEConv(n_hidden,aggregator_type))

    def forward(self,graph,inputs):
        h = self.dropout(inputs)
        for l,layer in enumerate(self.layers):
            h = layer(graph,h)
            if l != len(self.layers) - 1:
                h = self.activation(h)
                h = self.dropout(h)
        return h

modelG = GraphSAGE(in_feats=n_features,#20
                   n_hidden=16,n_classes=n_labels,#2
                   n_layers=3,activation=F.relu,dropout=0,aggregator_type='mean')

opt = torch.optim.Adam(modelG.parameters())

for epoch in range(50):
    modelG.train() 

    logits = modelG(g,node_features)
    
    loss = F.cross_entropy(logits[train_mask],node_labels[train_mask])
    
    acc = evaluate(modelG,g,node_features,node_labels,valid_mask)
    
    opt.zero_grad()
    loss.backward()
    opt.step()
    
    if epoch % 5 == 0:
        print('In epoch {},loss: {}'.format(epoch,loss),)

每次我训练模型(不进行任何更改)时,性能都会发生很大变化,精确度在0.45到0.87之间变化。如何保证结果的可重复性?我尝试将pytorch种子torch.manual_seed()设置为numpy种子,并将退出设置为0,但结果保持变化。这是正常现象还是我错过了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)