torch.FloatTensor output (log probabilities) of SGC """ self.eval() self.dropout = dropout if pyg_data == None: data = self.data else: data = pyg_data[0].to(self.device) self.data = data return self.forward(data) if __name__ == "__main__": from deeprobust.graph.data import Dataset, Dpr2Pyg # from deeprobust.graph.defense import SGC data = Dataset(root='/tmp/', name='cora') adj, features, labels = data.adj, data.features, data.labels idx_train, idx_val, idx_test = data.idx_train, data.idx_val, data.idx_test sgc = SGC(nfeat=features.shape[1], nclass=labels.max().item() + 1, device='cpu') sgc = sgc.to('cpu') pyg_data = Dpr2Pyg(data) sgc.fit(pyg_data, verbose=True) # train with earlystopping sgc.test() print(sgc.predict())
data = Dataset(root='/tmp/', name=args.dataset, setting='nettack', seed=15) adj, features, labels = data.adj, data.features, data.labels idx_train, idx_val, idx_test = data.idx_train, data.idx_val, data.idx_test gat = GAT(nfeat=features.shape[1], nhid=8, heads=8, nclass=labels.max().item() + 1, dropout=0.5, device=device) gat = gat.to(device) # test on clean graph print('==================') print('=== train on clean graph ===') data1 = Dpr2Pyg(data) gat.fit(data1, verbose=True) # train with earlystopping gat.test() print('==================') print('=== train on clean graph + diffusion===') pyg_data = Dpr2Pyg(data) data2 = pyg_data[0] gdc = T.GDC(self_loop_weight=1, normalization_in='sym', normalization_out='col', diffusion_kwargs=dict(method='ppr', alpha=0.05), sparsification_kwargs=dict(method='topk', k=128, dim=0), exact=True) data2 = gdc(data2)