From ed911dd5d10c08f2cbd8078731ab6f1caca57e2b Mon Sep 17 00:00:00 2001 From: Frozenmad Date: Wed, 29 Dec 2021 15:50:45 +0800 Subject: [PATCH 1/3] fix bugs of import --- autogl/module/train/link_prediction_full.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/autogl/module/train/link_prediction_full.py b/autogl/module/train/link_prediction_full.py index 8c7cec2..f0009a2 100644 --- a/autogl/module/train/link_prediction_full.py +++ b/autogl/module/train/link_prediction_full.py @@ -7,8 +7,6 @@ from .evaluation import Auc, EVALUATE_DICT from .base import EarlyStopping, BaseLinkPredictionTrainer from typing import Union, Tuple from copy import deepcopy -from torch_geometric.utils import negative_sampling -# from ...datasets.utils import negative_sampling from ...utils import get_logger from ...backend import DependentBackend @@ -198,6 +196,9 @@ class LinkPredictionTrainer(BaseLinkPredictionTrainer): try: neg_edge_index = data.train_neg_edge_index except: + from torch_geometric.utils import negative_sampling + # from ...datasets.utils import negative_sampling + neg_edge_index = negative_sampling( edge_index=data.train_pos_edge_index, num_nodes=data.num_nodes, From 7e17b07962896c4e6a1ecae0881e78d1bf2752b5 Mon Sep 17 00:00:00 2001 From: Frozenmad Date: Wed, 29 Dec 2021 16:22:06 +0800 Subject: [PATCH 2/3] add bug report --- autogl/module/model/dgl/_model_registry.py | 4 ++-- autogl/module/model/pyg/_model_registry.py | 4 ++-- autogl/module/train/__init__.py | 17 +++++++++++---- .../node_classification_trainer/__init__.py | 21 ++++++++++--------- autogl/solver/classifier/graph_classifier.py | 2 ++ .../classifier/hetero/node_classifier.py | 2 ++ autogl/solver/classifier/link_predictor.py | 2 ++ autogl/solver/classifier/node_classifier.py | 2 ++ 8 files changed, 36 insertions(+), 18 deletions(-) diff --git a/autogl/module/model/dgl/_model_registry.py b/autogl/module/model/dgl/_model_registry.py index e2926fe..4154622 100644 --- a/autogl/module/model/dgl/_model_registry.py +++ b/autogl/module/model/dgl/_model_registry.py @@ -22,7 +22,7 @@ class ModelUniversalRegistry: @classmethod def get_model(cls, name: str) -> _typing.Type[BaseAutoModel]: if type(name) != str: - raise TypeError + raise TypeError(f"Expect model type str, but get {type(name)}.") if name not in MODEL_DICT: - raise KeyError + raise KeyError(f"Do not support {name} model in pyg backend") return MODEL_DICT.get(name) diff --git a/autogl/module/model/pyg/_model_registry.py b/autogl/module/model/pyg/_model_registry.py index e2926fe..4154622 100644 --- a/autogl/module/model/pyg/_model_registry.py +++ b/autogl/module/model/pyg/_model_registry.py @@ -22,7 +22,7 @@ class ModelUniversalRegistry: @classmethod def get_model(cls, name: str) -> _typing.Type[BaseAutoModel]: if type(name) != str: - raise TypeError + raise TypeError(f"Expect model type str, but get {type(name)}.") if name not in MODEL_DICT: - raise KeyError + raise KeyError(f"Do not support {name} model in pyg backend") return MODEL_DICT.get(name) diff --git a/autogl/module/train/__init__.py b/autogl/module/train/__init__.py index c83f1c3..6bd60aa 100644 --- a/autogl/module/train/__init__.py +++ b/autogl/module/train/__init__.py @@ -29,7 +29,12 @@ from .graph_classification_full import GraphClassificationFullTrainer from .node_classification_full import NodeClassificationFullTrainer from .link_prediction_full import LinkPredictionTrainer from .node_classification_het import NodeClassificationHetTrainer -from .node_classification_trainer import * +if DependentBackend.is_pyg(): + from .node_classification_trainer import ( + NodeClassificationGraphSAINTTrainer, + NodeClassificationLayerDependentImportanceSamplingTrainer, + NodeClassificationNeighborSamplingTrainer + ) from .evaluation import get_feval, Acc, Auc, Logloss, Mrr, MicroF1 __all__ = [ @@ -42,9 +47,6 @@ __all__ = [ "GraphClassificationFullTrainer", "NodeClassificationFullTrainer", "NodeClassificationHetTrainer", - "NodeClassificationGraphSAINTTrainer", - "NodeClassificationLayerDependentImportanceSamplingTrainer", - "NodeClassificationNeighborSamplingTrainer", "LinkPredictionTrainer", "Acc", "Auc", @@ -53,3 +55,10 @@ __all__ = [ "MicroF1", "get_feval", ] + +if DependentBackend.is_pyg(): + __all__.extend([ + "NodeClassificationGraphSAINTTrainer", + "NodeClassificationLayerDependentImportanceSamplingTrainer", + "NodeClassificationNeighborSamplingTrainer", + ]) \ No newline at end of file diff --git a/autogl/module/train/node_classification_trainer/__init__.py b/autogl/module/train/node_classification_trainer/__init__.py index 6b8bf58..b70af7e 100644 --- a/autogl/module/train/node_classification_trainer/__init__.py +++ b/autogl/module/train/node_classification_trainer/__init__.py @@ -1,14 +1,15 @@ from ....backend import DependentBackend if DependentBackend.is_pyg(): - from .node_classification_sampled_trainer import * + from .node_classification_sampled_trainer import ( + NodeClassificationGraphSAINTTrainer, + NodeClassificationLayerDependentImportanceSamplingTrainer, + NodeClassificationNeighborSamplingTrainer + ) + __all__ = [ + "NodeClassificationGraphSAINTTrainer", + "NodeClassificationLayerDependentImportanceSamplingTrainer", + "NodeClassificationNeighborSamplingTrainer" + ] else: - NodeClassificationGraphSAINTTrainer = None - NodeClassificationLayerDependentImportanceSamplingTrainer = None - NodeClassificationNeighborSamplingTrainer = None - pass - - - - - + __all__ = [] diff --git a/autogl/solver/classifier/graph_classifier.py b/autogl/solver/classifier/graph_classifier.py index 246d480..2ea251e 100644 --- a/autogl/solver/classifier/graph_classifier.py +++ b/autogl/solver/classifier/graph_classifier.py @@ -124,6 +124,8 @@ class AutoGraphClassifier(BaseClassifier): else self._default_trainer[i] ) if isinstance(trainer, str): + if trainer not in TRAINER_DICT: + raise KeyError(f"Does not support trainer {trainer}") trainer = TRAINER_DICT[trainer]() if isinstance(model, (tuple, list)): trainer.encoder = model[0] diff --git a/autogl/solver/classifier/hetero/node_classifier.py b/autogl/solver/classifier/hetero/node_classifier.py index 9f944b2..210d376 100644 --- a/autogl/solver/classifier/hetero/node_classifier.py +++ b/autogl/solver/classifier/hetero/node_classifier.py @@ -115,6 +115,8 @@ class AutoHeteroNodeClassifier(BaseClassifier): else self._default_trainer[i] ) if isinstance(trainer, str): + if trainer not in TRAINER_DICT: + raise KeyError(f"Does not support trainer {trainer}") trainer = TRAINER_DICT[trainer]() if isinstance(model, (tuple, list)): trainer.encoder = model[0] diff --git a/autogl/solver/classifier/link_predictor.py b/autogl/solver/classifier/link_predictor.py index e4ca2a0..6e631cd 100644 --- a/autogl/solver/classifier/link_predictor.py +++ b/autogl/solver/classifier/link_predictor.py @@ -134,6 +134,8 @@ class AutoLinkPredictor(BaseClassifier): else self._default_trainer[i] ) if isinstance(trainer, str): + if trainer not in TRAINER_DICT: + raise KeyError(f"Does not support trainer {trainer}") trainer = TRAINER_DICT[trainer]() if isinstance(model, (tuple, list)): trainer.encoder = model[0] diff --git a/autogl/solver/classifier/node_classifier.py b/autogl/solver/classifier/node_classifier.py index cd04dd6..6172895 100644 --- a/autogl/solver/classifier/node_classifier.py +++ b/autogl/solver/classifier/node_classifier.py @@ -131,6 +131,8 @@ class AutoNodeClassifier(BaseClassifier): else self._default_trainer[i] ) if isinstance(trainer, str): + if trainer not in TRAINER_DICT: + raise KeyError(f"Does not support trainer {trainer}") trainer = TRAINER_DICT[trainer]() if isinstance(model, (tuple, list)): trainer.encoder = model[0] From 83c599c02476a8a868606bfd6f7c7b82222fb7a5 Mon Sep 17 00:00:00 2001 From: Frozenmad Date: Wed, 29 Dec 2021 16:42:55 +0800 Subject: [PATCH 3/3] add self loop to link prediction --- autogl/solver/classifier/graph_classifier.py | 2 +- examples/link_prediction.py | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/autogl/solver/classifier/graph_classifier.py b/autogl/solver/classifier/graph_classifier.py index 2ea251e..fc4106b 100644 --- a/autogl/solver/classifier/graph_classifier.py +++ b/autogl/solver/classifier/graph_classifier.py @@ -221,7 +221,7 @@ class AutoGraphClassifier(BaseClassifier): set_seed(seed) - num_classes = max(get_dataset_labels(dataset)) + 1 + num_classes = get_dataset_labels(dataset).max().item() + 1 if time_limit < 0: time_limit = 3600 * 24 diff --git a/examples/link_prediction.py b/examples/link_prediction.py index 7a8ccad..5e999e4 100644 --- a/examples/link_prediction.py +++ b/examples/link_prediction.py @@ -1,6 +1,8 @@ from autogl.datasets import build_dataset_from_name from autogl.solver.classifier.link_predictor import AutoLinkPredictor from autogl.module.train.evaluation import Auc +from autogl.datasets.utils import split_edges +from autogl.backend import DependentBackend import yaml import random import torch @@ -57,6 +59,17 @@ if __name__ == "__main__": dataset = build_dataset_from_name(args.dataset) + # split the edges for dataset + dataset = split_edges(dataset, 0.8, 0.05) + + # add self-loop + if DependentBackend.is_dgl(): + import dgl + # add self loop to 0 + data = list(dataset[0]) + data[0] = dgl.add_self_loop(data[0]) + dataset = [data] + configs = yaml.load(open(args.configs, "r").read(), Loader=yaml.FullLoader) configs["hpo"]["name"] = args.hpo configs["hpo"]["max_evals"] = args.max_eval @@ -67,9 +80,7 @@ if __name__ == "__main__": dataset, time_limit=3600, evaluation_method=[Auc], - seed=seed, - train_split=0.85, - val_split=0.05, + seed=seed ) autoClassifier.get_leaderboard().show()