Skip to main content

Multigrid Neural Network implemented in PyTorch

Project description

MGNet

PyPI Download count PyPI license Latest version

MultiGrid Methods + Neural Networks = MgNet

tl;dr

MultiGrid methods cool. Repository implements paper with pytorch.

Usage

from mgnet.model import mgnet, MGNet
import torch

supported_smoothers = MGNet.supported_smoothers()
print(f'{supported_smoothers=}')
n_image_chan = 3
batch_size = 1
image_width = 28
image_height = 28
model = mgnet(smoother=supported_smoothers[0],
              pretrained=False,
              progress=False,
              in_channels=n_image_chan,
              n_chan_u=128,
              n_chan_f=128,
              n_classes=10,
              n_iter=[2,2,2,2]
              )
x = torch.rand((batch_size, n_image_chan, image_width, image_height))
y = model(x)
print(f'{y=}')

Background

I first came up with the idea of using multigrid methods in deep learning after attending the seminar algebraic multigrid, in which we studied the publication by Jinchao Xu and Ludmil Zikatanov.

If multigrid methods are one of the fastest solvers for partial differential equality problems by use of grids, then knowing that images are functions on grids, multigrid methods can be used in machine learning, especially in FNNs and CNNs ...

i thought. Unfortunately, Sir Xu beat me up to the idea and published a paper 2 years before.

As I couldn't find a ready-to-use implementation of the paper, the work in this repository came to be.

Theory of operation

This type of network generalizes multiple preexisting models like the famous ResNet and DenseNet into a single configurable system.

The premise is built upon the idea of multigrid: the solution u is smoothened and its errors are projected on layers of various sizes.

A single step consists of three phases:

  1. Relaxation: Given a smooth S, the solution of the problem u is computed using S(u) = f several time, to obtain an improved solution v. The residuum of the equation is computed r = f - S(v)
  2. Restriction: the residuum r is transferred on a layer of lower size and the approximation of the error A_{r}e_{r} = r is computed
  3. Prolongation or interpolation: the error e is projected back on the original layer A_{p}e_{r} = r_{p} and the original solution updated: v = v + e_{r}
---
title: Basic multigrid
---
flowchart TD;
    s[Start: v<sup>h</sup> = 0] --> v1    
    subgraph "Relaxation"
        v1["Solve: S<sup>h</sup> * u<sup>h</sup> = f<sup>h</sup>"]--> v["Compute residuum: r = f - S * v"]
    end
    subgraph Restriction 
        v["Compute residuum: r<sup>h</sup> = f<sup>h</sup> - S<sup>h</sup>v<sup>h</sup>"] --> r1
        r1["Project residuum on coarse layer: G<sup>2h</sup>: r<sup>2h</sup>"] --> r2
    end
    subgraph Prolongation
        r2["Compute error: S<sup>2h</sup> * e<sup>2h</sup>= r<sup>2h</sup>"] --> r3
    end
    r3["Project error on finer layer: G<sup>h</sup>: e<sup>h</sup>"] --> p1["Updated solution: v<sup>h</sub> = v<sup>h</sub> + e<sup>h</sub>"]

Testing

Local:
Install dependencies:

uv sync --dev

Run inference test (default values already set. Use --help option for help):

PYTHONPATH="${PYTHONPATH}:${PWD}" uv run tests/test_inference.py

Docker:
Build image:

docker build . -t mgnet

Run image in container:

docker run mgnet --help

Literatur

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mgnet-0.1.2.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mgnet-0.1.2-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file mgnet-0.1.2.tar.gz.

File metadata

  • Download URL: mgnet-0.1.2.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"20.04","id":"focal","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mgnet-0.1.2.tar.gz
Algorithm Hash digest
SHA256 c15a9db7b5d8b40406d4b1b3f148ef8a62541eb2acbce15616ba67612c8420ae
MD5 884affa9950ac69d549f419af93ceeb9
BLAKE2b-256 8144dd4ca49d2a84913689924fd5a2a1a5de63328209dd4def57e9597ddcac63

See more details on using hashes here.

File details

Details for the file mgnet-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: mgnet-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"20.04","id":"focal","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mgnet-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fd9a31aa1957315dafcd88580fc9a5c836b379512a3558b1b6048e094e8e682a
MD5 348008c924de8f93430878450934a43d
BLAKE2b-256 1b1307118f505dbd97c06d3c00e1d58d63f8e267ea9114484ded97f5f193416c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page