Spektral is an easy library used to create graph neural network for graph classification. A graph is a mathematical object that represents relations between entities. We call the entities "nodes" and the relations "edges".
Colab Code
Run this code in colab to install spektral library.
!pip install spektral
Import all the neccessary packages needed
import numpy as np
import tensorflow as tf
import spektral
Datasets:
We will be using Cora dataset. It contains 2708 scientific publications. It has seven different classes. The dataset contains 5429 links referencing to the different citations used by the scientific publication.
![](https://static.wixstatic.com/media/48a282_64f4db84a3a44639be8e58a4d8ec8b64~mv2.png/v1/fill/w_980,h_603,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/48a282_64f4db84a3a44639be8e58a4d8ec8b64~mv2.png)
The raw files can be downloaded from here.
data= spektral.datasets.citation.Citation(name='Cora', random_split=False, normalize_x=False, dtype=np.float32)
Split the dataset into train, validation and test.
train_mask, val_mask, test_mask = data.mask_te, data.mask_va, data.mask_te
Check the graph info.
data.graphs
Output
[Graph(n_nodes=2708, n_node_features=1433, n_edge_features=None, n_labels=7)]
Get Adjacent nodes present in the graph.
adj = data.graphs[0].a
print(adj)
Output:
(0, 633) 1.0
(0, 1862) 1.0
(0, 2582) 1.0
(1, 2) 1.0
(1, 652) 1.0
...
Get the features of each nodes present in the graph.
features = data.graphs[0].x
features
Output:
array([[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.]], dtype=float32)
Checking the shape of the feature vector.
features.shape
Output:
(2708, 1433)
Get all the labels from the graph.
labels = data.graphs[0].y
labels
Output:
array([[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 1., 0., 0.],
[0., 0., 0., ..., 1., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.]], dtype=float32)
Check the label shape.
labels.shape
Output:
(2708, 7)
The adjacent matrix need to be converted from sparse matrix to dense so that it can be passed to the GNN model for training.
adj = adj.todense() + np.eye(adj.shape[0])
adj = adj.astype('float32')
Let's check number of samples present in training samples, validation samples and test samples.
np.sum(train_mak), np.sum(val_mask), np.sum(test_mask)
Output:
(1000, 500, 1000)
Next section will be on Graph Neural Network.
תגובות