π§ TinyCNN for MNIST (94K params)
This repository contains a lightweight Convolutional Neural Network (CNN) designed for the MNIST handwritten digit classification task.
The model is optimized to be small, fast, and easy to deploy, suitable for both research and educational purposes.
π Model Summary
| Attribute | Value |
|---|---|
| Model Name | TinyCNN |
| Dataset | MNIST (28Γ28 grayscale digits) |
| Total Parameters | ~94,410 |
| Architecture | Conv-BN-ReLU Γ3 β Global Avg Pool β FC |
| Input Shape | (1, 28, 28) |
| Output Classes | 10 |
| Framework | PyTorch |
π Architecture Overview
Input: 1Γ28Γ28
Conv Block 1: Conv(1β32, 3Γ3) β BatchNorm β ReLU β MaxPool(2Γ2)
Conv Block 2: Conv(32β64, 3Γ3) β BatchNorm β ReLU β MaxPool(2Γ2)
Conv Block 3: Conv(64β128, 3Γ3) β BatchNorm β ReLU β MaxPool(2Γ2)
Global Average Pooling
Fully Connected Layer β 10 output classes
This architecture emphasizes parameter efficiency while maintaining strong representation capability.
βοΈ Installation
pip install torch torchvision
π Load Model From Hub
import torch
from model import TinyCNN # Ensure this file is included in your repo
model = TinyCNN(num_classes=10)
state_dict = torch.hub.load_state_dict_from_url(
"https://huggingface.co/<your-username>/<your-model-repo>/resolve/main/tinycnn_mnist.pth"
)
model.load_state_dict(state_dict)
model.eval()
πΌ Example Inference
import torch
from torchvision import transforms
from PIL import Image
transform = transforms.Compose([
transforms.Grayscale(),
transforms.Resize((28, 28)),
transforms.ToTensor()
])
img = Image.open("digit.png")
x = transform(img).unsqueeze(0) # shape: (1, 1, 28, 28)
with torch.no_grad():
logits = model(x)
pred = logits.argmax(dim=1).item()
print("Predicted digit:", pred)