Minimal ExampleΒΆ
Here is a minimal example of how to train an unfolded GCN (UGCN) model using the UGNN library.
import numpy as np
from ugnn.networks import Dynamic_Network, Unfolded_Network
from ugnn.gnns import GCN, train, valid
from ugnn.utils.masks import non_zero_degree_mask, mask_split, pad_unfolded_mask
import torch
# Load example data
As = np.random.rand(10, 100, 100) # Example adjacency matrices (T=10, n=100)
node_labels = np.random.randint(0, 5, size=(100 * 10)) # Example node labels
num_classes = len(np.unique(node_labels))
# Convert to a dynamic network
dyn_network = Dynamic_Network(As, node_labels)
# Unfold the dynamic network into a single graph
unf_network = Unfolded_Network(dyn_network)[0]
# Create masks for training and validation
data_mask = non_zero_degree_mask(As, As.shape[1], As.shape[0])
train_mask, valid_mask, _, test_mask = mask_split(
data_mask, split_props=[0.5, 0.3, 0, 0.2], regime="semi-inductive"
)
train_mask = pad_unfolded_mask(train_mask, As.shape[1])
valid_mask = pad_unfolded_mask(valid_mask, As.shape[1])
# Train a GCN model
model = GCN(
num_nodes=unf_network.num_nodes, num_channels=16, num_classes=num_classes, seed=123
)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
for epoch in range(10): # Reduced epochs for brevity
train(model, unf_network, train_mask, optimizer)
valid_acc = valid(model, unf_network, valid_mask)
print(f"Epoch {epoch}, Validation Accuracy: {valid_acc:.3f}")