--- library_name: matrixpfn tags: - preconditioner - sparse-linear-systems - graph-neural-network - pytorch --- # matrixpfn-base GNN-based learned preconditioner for sparse linear systems. **Version**: 20260309-0350 ## Usage ```python import numpy as np from scipy.io import mmread from matrixpfn import MatrixPFN pfn = MatrixPFN.from_pretrained("Csed-dev/matrixpfn-base") A = mmread("matrix.mtx") # any scipy sparse matrix b = A @ np.random.randn(A.shape[0]) result = pfn.solve(A, b) # accepts scipy sparse directly print(f"Converged: {result.converged} in {result.iterations} iterations") ``` ## Architecture | Parameter | Value | |-----------|-------| | Network | ContextResGCN | | Layers | 24 | | Embed | 128 | | Hidden | 512 | | Context pairs | 10 | | Parameters | 2,056,706 | | dtype | float32 | ## Training - **epochs**: 5000 - **best_loss**: 0.006055 - **loss_function**: l1_direct - **batch_size**: 256 - **matrices_per_epoch**: 4 - **domains**: diffusion, diffusion_advection, graph_laplacian, elasticity, stokes, sbm, spectral_stress, variable_diffusion, variable_advection, enhanced_diffusion, enhanced_advection, random_sparse, directed_power_law - **grid_sizes**: [16, 24, 32, 48] ## Benchmark | domain | grid | converged | avg_iters | avg_residual | |--------|------|-----------|-----------|--------------| | diffusion | 16x16 | 0/20 | 300.0 | 3.96e-02 | | diffusion | 24x24 | 0/20 | 300.0 | 3.40e-02 | | diffusion | 32x32 | 0/20 | 300.0 | 2.43e-02 | | diffusion | 48x48 | 0/20 | 300.0 | 3.41e-02 | | diffusion | 64x64 | 0/20 | 300.0 | 4.11e-02 | | diffusion_advection | 16x16 | 0/20 | 300.0 | 3.69e-02 | | diffusion_advection | 24x24 | 0/20 | 300.0 | 2.91e-02 | | diffusion_advection | 32x32 | 0/20 | 300.0 | 2.59e-02 | | diffusion_advection | 48x48 | 0/20 | 300.0 | 2.95e-02 |