Vecrist's picture
Upload README.md with huggingface_hub
574952b verified
|
Raw
History Blame Contribute Delete
2.08 kB
---
language:
- en
license: mit
library_name: pytorch
tags:
- computer-vision
- image-classification
- mnist
- handwritten-digits
metrics:
- accuracy
pipeline_tag: image-classification
---
# MNIST Handwritten Digit Classifiers (CNN & MLP PyTorch Models)
This repository contains pre-trained **PyTorch** model weights for classifying handwritten digits (0 to 9) from 28x28 grayscale images:
- **CNN Model (`MNIST_CNNmodel_weights.pth`)**: **99.03%** Test Accuracy.
- **MLP Model (`MNIST_MLPmodel_weights.pth`)**: Baseline Multi-Layer Perceptron.
- **Application**: Interactive Tkinter digit drawing app (`handdrawnDigitClassification.py`).
---
## Model Architectures
### 1. Convolutional Neural Network (CNN) - 99.03% Accuracy
- **Block 1**: `Conv2d(1, 32, kernel_size=3)` -> `BatchNorm` -> `ReLU` -> `MaxPool2d(2)`
- **Block 2**: `Conv2d(32, 64, kernel_size=3)` -> `BatchNorm` -> `ReLU` -> `MaxPool2d(2)` -> `Dropout2d(0.25)`
- **Classifier**: `Flatten` -> `Linear(64*7*7, 128)` -> `ReLU` -> `Dropout(0.5)` -> `Linear(128, 10)`
### 2. Multi-Layer Perceptron (MLP)
- `Flatten` -> `Linear(784, 128)` -> `ReLU` -> `Linear(128, 64)` -> `ReLU` -> `Linear(64, 10)`
---
## Model Usage
```python
import torch
import torch.nn as nn
from huggingface_hub import hf_hub_download
# Define CNN Model
class MNISTCNN(nn.Module):
def __init__(self):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(1, 32, 3), nn.BatchNorm2d(32), nn.ReLU(), nn.MaxPool2d(2),
nn.Conv2d(32, 64, 3), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2), nn.Dropout2d(0.25)
)
self.classifier = nn.Sequential(
nn.Flatten(),
nn.Linear(64 * 7 * 7, 128), nn.ReLU(), nn.Dropout(0.5),
nn.Linear(128, 10)
)
def forward(self, x):
return self.classifier(self.features(x))
model = MNISTCNN()
weights_path = hf_hub_download(repo_id="Vecrist/mnist-pytorch-digit-classifiers", filename="MNIST_CNNmodel_weights.pth")
model.load_state_dict(torch.load(weights_path, map_location="cpu"))
model.eval()
```