From 34fbf8b7a12db88cabd830ef6f965d17e57b5b81 Mon Sep 17 00:00:00 2001 From: SwiftieH Date: Wed, 29 Dec 2021 12:49:18 +0800 Subject: [PATCH 1/5] fixed bug in dgl gin model --- autogl/module/model/dgl/gin.py | 5 +++-- autogl/module/model/dgl/topkpool.py | 11 ++++++----- test/performance/graph_classification/dgl/model.py | 13 ++++++++----- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/autogl/module/model/dgl/gin.py b/autogl/module/model/dgl/gin.py index 12d5658..8462bbe 100644 --- a/autogl/module/model/dgl/gin.py +++ b/autogl/module/model/dgl/gin.py @@ -141,8 +141,9 @@ class GIN(torch.nn.Module): self.num_graph_features = self.args["num_graph_features"] self.num_layers = self.args["num_layers"] assert self.num_layers > 2, "Number of layers in GIN should not less than 3" - if not self.num_layers == len(self.args["hidden"]) + 1: - LOGGER.warn("Warning: layer size does not match the length of hidden units") + #if not self.num_layers == len(self.args["hidden"]) + 1: + # LOGGER.warn("Warning: layer size does not match the length of hidden units") + assert self.num_layers == len(self.args["hidden"]) + 1, "Warning: layer size does not match the length of hidden units" self.eps = self.args["eps"] self.num_mlp_layers = self.args["mlp_layers"] diff --git a/autogl/module/model/dgl/topkpool.py b/autogl/module/model/dgl/topkpool.py index 7573c0d..13b74a8 100644 --- a/autogl/module/model/dgl/topkpool.py +++ b/autogl/module/model/dgl/topkpool.py @@ -131,9 +131,10 @@ class Topkpool(torch.nn.Module): self.num_graph_features = self.args["num_graph_features"] self.num_layers = self.args["num_layers"] assert self.num_layers > 2, "Number of layers in GIN should not less than 3" + assert self.num_layers == len(self.args["hidden"]) + 1, "Warning: layer size does not match the length of hidden units" input_dim = self.args["features_num"] - hidden_dim = self.args["hidden"][0] + hidden = self.args["hidden"] final_dropout = self.args["dropout"] output_dim = self.args["num_class"] @@ -143,12 +144,12 @@ class Topkpool(torch.nn.Module): for layer in range(self.num_layers - 1): if layer == 0: - self.gcnlayers.append(GraphConv(input_dim, hidden_dim)) + self.gcnlayers.append(GraphConv(input_dim, hidden[layer])) else: - self.gcnlayers.append(GraphConv(hidden_dim, hidden_dim)) + self.gcnlayers.append(GraphConv(hidden[layer-1], hidden[layer])) #self.gcnlayers.append(GraphConv(input_dim, hidden_dim)) - self.batch_norms.append(nn.BatchNorm1d(hidden_dim)) + self.batch_norms.append(nn.BatchNorm1d(hidden[layer])) # Linear function for graph poolings of output of each layer # which maps the output of different layers into a prediction score @@ -164,7 +165,7 @@ class Topkpool(torch.nn.Module): nn.Linear(input_dim * k, output_dim)) else: self.linears_prediction.append( - nn.Linear(hidden_dim * k, output_dim)) + nn.Linear(hidden[layer-1] * k, output_dim)) self.drop = nn.Dropout(final_dropout) diff --git a/test/performance/graph_classification/dgl/model.py b/test/performance/graph_classification/dgl/model.py index 140f0aa..1ff45b1 100644 --- a/test/performance/graph_classification/dgl/model.py +++ b/test/performance/graph_classification/dgl/model.py @@ -57,7 +57,8 @@ def train(net, trainloader, validloader, optimizer, criterion, epoch, device): labels = labels.to(device) graphs = graphs.to(device) - outputs = net((graphs, labels)) + #outputs = net((graphs, labels)) + outputs = net((graphs)) # feat = graphs.ndata.pop('attr') # outputs = net(graphs, feat) @@ -76,7 +77,8 @@ def train(net, trainloader, validloader, optimizer, criterion, epoch, device): gt.append(labels) # feat = graphs.ndata.pop('attr') # outputs = net(graphs, feat) - outputs = net((graphs, labels)) + outputs = net((graphs)) + #outputs = net((graphs, labels)) pr.append(outputs.argmax(1)) gt = torch.cat(gt, dim=0) pr = torch.cat(pr, dim=0) @@ -102,7 +104,8 @@ def eval_net(net, dataloader, device): # feat = graphs.ndata.pop('attr') total += len(labels) # outputs = net(graphs, feat) - outputs = net((graphs, labels)) + outputs = net((graphs)) + # outputs = net((graphs, labels)) _, predicted = torch.max(outputs.data, 1) total_correct += (predicted == labels.data).sum().item() @@ -146,7 +149,7 @@ def main(args): device=device, ).from_hyper_parameter({ "num_layers": 5, - "hidden": [64], + "hidden": [64,64,64,64], "dropout": 0.5, "act": "relu", "eps": "False", @@ -161,7 +164,7 @@ def main(args): device=device, ).from_hyper_parameter({ "num_layers": 5, - "hidden": [64], + "hidden": [64,64,64,64], "dropout": 0.5 }).model From 8e03d18dbebb60bd6c6a2d7419eeacb4f6db3fed Mon Sep 17 00:00:00 2001 From: SwiftieH Date: Wed, 29 Dec 2021 13:28:09 +0800 Subject: [PATCH 2/5] fix bug in pyg gin base.py --- test/performance/graph_classification/pyg/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/performance/graph_classification/pyg/base.py b/test/performance/graph_classification/pyg/base.py index 31c2f3c..ddd1453 100644 --- a/test/performance/graph_classification/pyg/base.py +++ b/test/performance/graph_classification/pyg/base.py @@ -10,7 +10,7 @@ import torch.nn.functional as F from torch.nn import Sequential, Linear, ReLU import torch_geometric from torch_geometric.datasets import TUDataset -if int(torch_geometric.__version__.split(",")[0]) >= 2: +if int(torch_geometric.__version__.split(".")[0]) >= 2: from torch_geometric.loader import DataLoader else: from torch_geometric.data import DataLoader From 7557f95cad6285219847ddc7cc832dbdd83da3fc Mon Sep 17 00:00:00 2001 From: SwiftieH Date: Thu, 30 Dec 2021 16:53:18 +0800 Subject: [PATCH 3/5] attemp to make random consistent in pyg gin base.py --- .../graph_classification/pyg/base.py | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/test/performance/graph_classification/pyg/base.py b/test/performance/graph_classification/pyg/base.py index ddd1453..f7df144 100644 --- a/test/performance/graph_classification/pyg/base.py +++ b/test/performance/graph_classification/pyg/base.py @@ -18,6 +18,9 @@ from torch_geometric.nn import GINConv, global_add_pool, GraphConv, TopKPooling from torch_geometric.nn import global_mean_pool as gap, global_max_pool as gmp import logging +torch.backends.cudnn.deterministic = True +#torch.use_deterministic_algorithms(True) + logging.basicConfig(level=logging.ERROR) class GIN(torch.nn.Module): @@ -163,6 +166,10 @@ if __name__ == '__main__': dataids = list(range(len(dataset))) random.seed(args.dataset_seed) random.shuffle(dataids) + torch.manual_seed(args.dataset_seed) + np.random.seed(args.dataset_seed) + if args.device == 'cuda': + torch.cuda.manual_seed(args.dataset_seed) fold = int(len(dataset) * 0.1) train_index = dataids[:fold * 8] @@ -177,16 +184,30 @@ if __name__ == '__main__': labels = np.array([data.y.item() for data in dataset.test_split]) - train_loader = DataLoader(dataset.train_split, batch_size=args.batch_size) - val_loader = DataLoader(dataset.val_split, batch_size=args.batch_size) - test_loader = DataLoader(dataset.test_split, batch_size=args.batch_size) - + def seed_worker(worker_id): + #seed = torch.initial_seed() + torch.manual_seed(args.dataset_seed) + np.random.seed(args.dataset_seed) + random.seed(args.dataset_seed) + g = torch.Generator() + g.manual_seed(args.dataset_seed) + + train_loader = DataLoader(dataset.train_split, batch_size=args.batch_size, worker_init_fn=seed_worker, generator=g) + val_loader = DataLoader(dataset.val_split, batch_size=args.batch_size, worker_init_fn=seed_worker, generator=g) + test_loader = DataLoader(dataset.test_split, batch_size=args.batch_size, worker_init_fn=seed_worker, generator=g) + + #train_loader = DataLoader(dataset.train_split, batch_size=args.batch_size, shuffle=False) + #val_loader = DataLoader(dataset.val_split, batch_size=args.batch_size, shuffle=False) + #test_loader = DataLoader(dataset.test_split, batch_size=args.batch_size, shuffle=False) + accs = [] for seed in tqdm(range(args.repeat)): torch.manual_seed(seed) np.random.seed(seed) - random.seed(seed) + #random.seed(seed) + if args.device == 'cuda': + torch.cuda.manual_seed(seed) if args.model == 'gin': model = GIN() From b08583f824c632e46f6dade78484616462f43a74 Mon Sep 17 00:00:00 2001 From: Frozenmad Date: Fri, 31 Dec 2021 10:11:11 +0800 Subject: [PATCH 4/5] reverse uncessary changes --- autogl/module/model/dgl/gin.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/autogl/module/model/dgl/gin.py b/autogl/module/model/dgl/gin.py index 83cce84..96bb4fb 100644 --- a/autogl/module/model/dgl/gin.py +++ b/autogl/module/model/dgl/gin.py @@ -141,9 +141,8 @@ class GIN(torch.nn.Module): self.num_graph_features = self.args["num_graph_features"] self.num_layers = self.args["num_layers"] assert self.num_layers > 2, "Number of layers in GIN should not less than 3" - #if not self.num_layers == len(self.args["hidden"]) + 1: - # LOGGER.warn("Warning: layer size does not match the length of hidden units") - assert self.num_layers == len(self.args["hidden"]) + 1, "Warning: layer size does not match the length of hidden units" + if not self.num_layers == len(self.args["hidden"]) + 1: + LOGGER.warn("Warning: layer size does not match the length of hidden units") self.eps = True if self.args["eps"]=="True" else False self.num_mlp_layers = self.args["mlp_layers"] From cee749b2958bfee69851145637dd78e4cc012d3b Mon Sep 17 00:00:00 2001 From: Frozenmad Date: Fri, 31 Dec 2021 10:11:41 +0800 Subject: [PATCH 5/5] reverse uncessary changes --- autogl/module/model/dgl/gin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autogl/module/model/dgl/gin.py b/autogl/module/model/dgl/gin.py index 96bb4fb..5682309 100644 --- a/autogl/module/model/dgl/gin.py +++ b/autogl/module/model/dgl/gin.py @@ -142,7 +142,7 @@ class GIN(torch.nn.Module): self.num_layers = self.args["num_layers"] assert self.num_layers > 2, "Number of layers in GIN should not less than 3" if not self.num_layers == len(self.args["hidden"]) + 1: - LOGGER.warn("Warning: layer size does not match the length of hidden units") + LOGGER.warn("Warning: layer size does not match the length of hidden units") self.eps = True if self.args["eps"]=="True" else False self.num_mlp_layers = self.args["mlp_layers"]