← Back to selected work

Machine learning · December 2025

CNN From Scratch: MNIST + KinFaceW

A group project implementing a convolutional neural network with pure NumPy, including manual backpropagation and command line training workflows for image classification and kinship verification.

LanguagePython
Core libraryNumPy
TasksClassification + verification
Learning focusManual backpropagation

01 / Why from scratch?

Use less abstraction to understand what the network is actually doing.

Rather than relying on a deep learning framework to handle the training mechanics, the project used NumPy so the team had to work directly with the operations behind convolutional neural networks and backpropagation.

02 / Pipeline

Forward pass, prediction, error, backward pass, update.

The project applied the implementation to MNIST image classification and KinFaceW kinship verification, giving the same core network concepts two different problem contexts.

03 / Implementation

Training logic that we could inspect end to end.

  • Pure NumPy implementation instead of a high level neural network framework.
  • Manual backpropagation as part of the learning and implementation goal.
  • Command line training workflow.
  • Use on MNIST and KinFaceW datasets.
  • Group collaboration on the overall implementation.

04 / What it demonstrates

Understanding the mechanics beneath high level ML frameworks.

Shape discipline

Neural network code depends heavily on keeping tensor and matrix dimensions consistent across layers.

Backpropagation

Implementing gradient flow manually makes the relationship between forward computations and parameter updates much more concrete.

Debugging numerics

Working closer to the underlying ML operations requires careful inspection because small implementation mistakes can propagate through the whole model.

Team integration

Shared model code has to be understandable enough for multiple contributors to test and extend.

Back to professional workProduct Data Workflow Automation