# Iterative PageRank Model Non-autoregressive iterative transformer that learns PageRank via shared-weight refinement. ## Architecture - **Params:** 796,032 - **Layers:** 4 (shared across 8 iterations) - **Width:** 128, **Heads:** 4 - **Graph size:** 64 nodes (directed) - **Damping:** 0.85 ## Task Given a directed graph's adjacency matrix, predict each node's PageRank value. The model learns power iteration implicitly through iterative refinement. ## Metrics - **KL divergence:** between predicted and true PR distribution - **Ranking accuracy:** pairwise ordering correctness - **Top-k accuracy:** overlap of predicted vs true top-k important nodes ## Usage ```python import torch from iterative_pagerank import IterativePageRankModel, PageRankConfig, generate_batch ckpt = torch.load("model.pt", weights_only=True) config = PageRankConfig(**ckpt["config"]) model = IterativePageRankModel(config) model.load_state_dict(ckpt["model_state_dict"]) model.eval() adj, targets, meta = generate_batch(1, config, edge_prob=0.1, graph_weights=(0.0, 0.0, 1.0), device="cpu") with torch.no_grad(): all_prs = model(adj, n_iters=64) print(f"Predicted: {all_prs[-1][0].topk(5)}") print(f"True: {targets[0].topk(5)}") ```