Note: Code from this repo file is originally from repo, for paper Simplified Neural Architecture search for Graph Neural Networks.
Unless specified at the top of a file, all code within a file originally belongs the authors of the original code.
Student: Sylvester Shan uid: u6049249
Code for experiment described in chapter 3 can be found in folder MoleculePropertyPrediction. The readme.md file contains the information of how to run it.
It is a neural architecture search (NAS) for graph neural network (GNN). To obtain optimal data-specific GNN architectures, we propose the SNAG framework, consisting of a simpler yet more expressive search space and a RL-based search algorithm.
The framewwork is implemented on top of GraphNAS and PyG.
Following is the conda environment that's been used.
conda create --name msnag python=3.8
conda activate msnag
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
conda install pyg -c pyg
pip install torchsnooper
conda install -c conda-forge hyperopt
conda install -y -c conda-forge rdkit
conda install -c dglteam dgl-cuda11.3
conda install psutil
pip install dgllife
pip install deepchem
Following are the datasets for MoleculeNet are used for molecule property prediction:
- BACE
- BBBP
- HIV
- MUV
- SIDER
- Tox21
- ToxCast
To search a 3-layer GNN using one of the dataset above based on the designed search space, please run:
python -m rlctr.main --dataset <dataset name> --layers_of_child_model 3
For now this does not work correctly.
Following are the TODOs that needs to be done such that they are able to run the experiments described in Chapter 4.
- Load dataset from DGL-lifesci, as it allows use to pre-train node/edge features easily
- Convert it to a Pytorch Data Class
- Implement Graph Transform Netowrk
- Call it in generate_layer()
- add it to search space
- Add in extract RNN token "readout", as this file performs node classification instead of graph classification
- Add in options for the 'readout' token
- For the generated GNN, modify it such that it uses the edge_weight and edge_attr features when training.
- Add in different args for the argparser to make it eaiser to run different experiments