Graph Neural Networks
Graph Neural Networks are a class of neural networks, optimized for deep learning on graphs. They provide an endtoend solution for machine learning on graphs, unlike graph kernels/embeddings where a transformation step is applied before a "classical" machine learning algorithm. As they have attracted more attention in the recent years, a range of different architectures for this class has sprung up ranging from the Graph Convolutional Network (GCN, Kipf et al. 2017) to Graph Attention Networks (citation needed). The different architectures learn from the graph and it's overall structure, making use of the graph information unlike classical neural networks.
The graph neural network module of PHOTONAI Graph provides a variety of customizable outofthebox graph neural networks. They can be instantiated in one line of code and easily integrate into PHOTONAI pipelines.
Graph Neural Network Module
The Graph Neural Network module consists of three parts. The Layer Module, where different layers are implemented and the messagepassing steps of these are defined. The Model module where the module is constructed as a class (see pytorch neural networks). And the GraphConvNet module which calls the models and implements fit and transform steps, making them sklearn conform. This module also handles data conversions, converting graphs to the right format for the networks, which are written in pytorch.
You can also write your own custom graph neural network architecture, and register them via the PHOTON register function (link here). When writing your own custom neural nets you are free to choose your own package, as long as they implement fit, transform and predict functions like the GraphConvNet module classes. These can also be used as a blueprint if you want to integrate your own graph neural network architectures into PHOTONAI.
DglModel
Base class for DGL based graph neural networks. Implements helper functions and shared parameters used by other models. Implementation based on dgl python package.
Parameters:
Name  Type  Description  Default 

nn_epochs 
int

the number of epochs which a model is trained 
200

learning_rate 
float

the learning rate when training the model 
0.001

batch_size 
int

number of samples per training batch 
32

adjacency_axis 
int

position of the adjacency matrix, default being zero 
0

feature_axis 
int

position of the feature matrix 
1

add_self_loops 
bool

self loops are added if true 
True

allow_zero_in_degree 
bool

If true the zero in degree test of dgl is disabled 
False

validation_score 
bool

If true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

early_stopping 
bool

If true then the loss over multiple iterations is evaluated to see whether early stopping should be called on the model 
False

verbose 
bool

If true verbose information is printed 
False

logs 
str

Path to the log data 
None

DGLRegressorBaseModel
Abstract base class for regression algorithms
Parameters:
Name  Type  Description  Default 

nn_epochs 
int

Number of epochs to fit the model 
200

learning_rate 
float

Learning rate for model training 
0.001

batch_size 
int

Batch size for model training 
32

adjacency_axis 
int

Axis which contains the adjacency 
0

feature_axis 
int

Axis which contains the features 
1

add_self_loops 
bool

If this value is true, a self loop is added to each node of each graph 
True

allow_zero_in_degree 
bool

If true the dgl model allows zeroindegree Graphs 
False

validation_score 
bool

If true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

verbose 
bool

If true verbose output is generated 
False

logs 
str

Default logging directory 
None

DGLClassifierBaseModel
Abstract base class for classification algorithms
Parameters:
Name  Type  Description  Default 

nn_epochs 
int

Number of epochs to fit the model 
200

learning_rate 
float

Learning rate for model training 
0.001

batch_size 
int

Batch size for model training 
32

adjacency_axis 
int

Axis which contains the adjacency 
0

feature_axis 
int

Axis which contains the features 
1

add_self_loops 
bool

If this value is true, a self loop is added to each node of each graph 
True

allow_zero_in_degree 
bool

If true the dgl model allows zeroindegree Graphs 
False

validation_score 
bool

It true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

verbose 
bool

If true verbose output is generated 
False

logs 
str

Default logging directory 
None

GCNClassifierModel
Graph Attention Network for graph classification. GCN Layers from Kipf & Welling, 2017. Implementation based on dgl & pytorch.
Parameters:
Name  Type  Description  Default 

in_dim 
int

input dimension 
1

hidden_layers 
int

number of hidden layers used by the model 
2

hidden_dim 
int

dimensions in the hidden layers 
256

validation_score 
bool

If true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

verbose 
bool

If true verbose output is generated 
False

SGConvClassifierModel
Graph convolutional network for graph classification. Simple Graph convolutional layers from Wu, Felix, et al., 2018. Implementation based on dgl & pytorch.
Parameters:
Name  Type  Description  Default 

in_dim 
int

input dimension 
1

hidden_layers 
int

number of hidden layers used by the model 
2

hidden_dim 
int

dimensions in the hidden layers 
256

validation_score 
bool

If true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

verbose 
bool

If true verbose output is generated 
False

GATClassifierModel
Graph Attention Network for graph classification. GAT Layers are modeled after Veličković et al., 2018. Implementation based on dgl & pytorch.
Parameters:
Name  Type  Description  Default 

in_dim 
int

input dimension 
1

hidden_layers 
int

number of hidden layers used by the model 
2

hidden_dim 
int

dimensions in the hidden layers 
256

heads 
List

list with number of heads per hidden layer 
None

validation_score 
bool

If true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

verbose 
bool

If true verbose output is generated 
False

agg_mode 
aggregation mode for the graph convolutional layers 
'mean'

GCNRegressorModel
Graph convolutional Network for graph regression. GCN Layers from Kipf & Welling, 2017. Implementation based on dgl & pytorch.
Parameters:
Name  Type  Description  Default 

in_dim 
int

input dimension 
1

hidden_layers 
int

number of hidden layers used by the model 
2

hidden_dim 
int

dimensions in the hidden layers 
256

validation_score 
bool

If true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

verbose 
bool

If true verbose output is generated 
False

SGConvRegressorModel
Graph convolutional network for graph regression. Simple Graph convolutional layers from Wu, Felix, et al., 2018. Implementation based on dgl & pytorch.
Parameters:
Name  Type  Description  Default 

in_dim 
int

input dimension 
1

hidden_layers 
int

number of hidden layers used by the model 
2

hidden_dim 
int

dimensions in the hidden layers 
256

validation_score 
bool

If true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

verbose 
bool

If true verbose output is generated 
False

GATRegressorModel
Graph Attention Network for graph regression. GAT Layers are modeled after Veličković et al., 2018. Implementation based on dgl & pytorch.
Parameters:
Name  Type  Description  Default 

in_dim 
int

input dimension 
1

hidden_layers 
int

number of hidden layers used by the model 
2

hidden_dim 
int

dimensions in the hidden layers 
256

heads 
List

list with number of heads per hidden layer 
None

validation_score 
bool

If true the input data is split into train and test (90%/10%). The testset is then used to get validation results during training 
False

verbose 
bool

If true verbose output is generated 
False
