Skip to main content

nanograd

A minimal autodiffentiation engine and neural network library built from scratch.Numpy only, no PyTorch.

Supports forward and backward passes through a dynamic computation graph, a neural network API modelled after PyTorch, and computation graph visualization. Trained on MNIST.

pip install nanograd

Quick start

from nanograd import Tensor
from nanograd.nn import Sequential, Linear, ReLU, CrossEntropyLoss, SGD

# define a network
model = Sequential(Linear(784, 128),ReLU(),Linear(128, 64),ReLU(),Linear(64, 10))

loss_fn = CrossEntropyLoss()
optimizer = SGD(model.parameters(), lr=0.01)

# training step
x = Tensor(X_batch)          
out = model(x)               
loss = loss_fn(out, y_batch)
loss.backward()
optimizer.step()
optimizer.zero_grad()

Autograd

import numpy as np
from nanograd import Tensor

x = Tensor(np.array([[1.0, 2.0], [3.0, 4.0]]))
y = Tensor(np.array([[0.5], [1.5]]))

z = (x @ y).sum()
z.backward()

print(x.grad)   # dz/dx
print(y.grad)   # dz/dy

Computation graph visualization

from nanograd.viz import draw_dot

x = Tensor(np.array([2.0]))
y = Tensor(np.array([3.0]))
z = (x * y + x).sum()
z.backward()

dot = draw_dot(z)
dot.render("graph", view=True)   

computation graph


What's implemented

Tensor ops — +, -, *, /, **, @ (matmul), sum, mean, reshape, transpose, exp, log

Activations — relu, tanh, sigmoid, softmax

Layers — Linear (Xavier init), ReLU

Loss — CrossEntropyLoss, MSELoss

Optimizer — SGD

Viz — draw_dot, trace (graphviz-based, local use)


MNIST results

Trained a 784 → 128 → 64 → 10 network with ReLU activations, SGD lr=0.01, batch size 32, 10 epochs.

mnist training

mnist training


Run the tests

git clone https://github.com/duaasiraj/nanograd
cd nanograd
pip install -e ".[dev]"
pytest tests/ -v

Project structure

nanograd/
├── nanograd/
│   ├── engine/
│   │   ├── tensor.py       # Tensor class, all ops + backward rules
│   │   └── utils.py        # topo sort, unbroadcast, gradient_check
│   ├── nn/
│   │   ├── layers.py       # Linear, ReLU
│   │   ├── loss.py         # CrossEntropyLoss, MSELoss
│   │   ├── optim.py        # SGD
│   │   ├── sequential.py   # Sequential container
│   │   ├── modules.py      # base Module class
│   │   ├── accuracy.py     # multiclass accuracy
│   │   └── metrics.py      # precision, recall, F1
│   └── viz/
│       └── graph_viz.py    # draw_dot, trace
├── tests/
│   └── test_gradients.py   # 17 numerical gradient checks
├── demos/
│   ├── mnist_demo.py
│   └── xor_demo.py
└── pyproject.toml

License

MIT — see LICENSE

Disclaimer: This project was developed as a learning project and may contain mistakes, inefficiencies, or incomplete implementations. If you spot an issue or have an improvement, feel free to open an issue or submit a pull request. Check out contribution.md for further details :)

Metadata

Release files for nanograd-lite 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nanograd-lite 0.1.1
File Size Uploaded
nanograd_lite-0.1.1.tar.gz 173.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nanograd-lite 0.1.1
File Interpreter ABI Platform
nanograd_lite-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 184.7 kB

Release files / nanograd_lite-0.1.1.tar.gz

Download URL nanograd_lite-0.1.1.tar.gz
Size 173.4 kB
Tags Source
SHA-256 checksum
How to use checksums
1f6c8fed1994fd50206cc313f9776f61c926c39594a86ce17c0b362544f03354
BLAKE2b-256 checksum
How to use checksums
689bb50a253bff1b9e4ad64925f80611affa8e9832a7bba933424fee090449ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / nanograd_lite-0.1.1-py3-none-any.whl

Download URL nanograd_lite-0.1.1-py3-none-any.whl
Size 11.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
de572ea239357254dc203784bf8b1689da791c9a7ede9e1b44b53b8d3303fc69
BLAKE2b-256 checksum
How to use checksums
0e22e409d38f20f387f8800f9a1254c0bfe542a2530f8be31f7b0b88c6433868
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page