# we need to set the random seed to be the same as that when you generate the perturbed graph # data = Dataset(root='/tmp/', name=args.dataset, setting='nettack', seed=15) # Or we can just use setting='prognn' to get the splits # data = Dataset(root='./tmp/', name=args.dataset, setting='prognn') # adj, features, labels_1 = data.adj, data.features, data.labels # idx_train, idx_val, idx_test = data.idx_train, data.idx_val, data.idx_test # load pre-attacked graph # perturbed_data = PrePtbDataset(root='./tmp/', # name=args.dataset, # attack_method='meta', # ptb_rate=args.ptb_rate) # use data splist provided by prognn data = Dataset(root='./tmp/', name=args.dataset, setting='prognn') data.adj = sp.csr_matrix(adj_per) data.features = sp.csr_matrix(base_feat) data.labels = labels data.idx_train = idx_train data.idx_val = idx_val data.idx_test = idx_test perturbed_adj = sp.csr_matrix(adj_per, dtype=float) features = sp.csr_matrix(base_feat, dtype=float) # Setup Defense Model gat = GAT(nfeat=features.shape[1], nhid=8, heads=8, nclass=labels.max().item() + 1, dropout=0.5,
features, labels, preprocess_adj=False, device=device) labels = labels.cuda() perturbed_adj = to_sparse(perturbed_adj.cuda()) features = features.cuda() perturbed_adj = ut.normalize_adj_tensor(perturbed_adj, True) features[features > 1] = 1 data = load_data(args.data, normalize_feature=args.no_fea_norm, missing_rate=args.missing_rate, cuda=True) data.x = features data.y = labels data.adj = perturbed_adj data.train_mask, data.val_mask, data.test_mask = idx_train, idx_val, idx_test nfeat = data.x.size(1) nclass = int(data.y.max()) + 1 net = getattr(models, args.model)(nfeat, args.hid, nclass, dropout=args.dropout, nhead=args.nhead, nlayer=args.nlayer, norm_mode=args.norm_mode, norm_scale=args.norm_scale, residual=args.residual) net = net.cuda() optimizer = torch.optim.Adam(net.parameters(), args.lr, weight_decay=args.wd)