← All projects

Deep Learning · Computer Vision

Deep Learning Image Classification

A custom input-conditioned convolutional network for CIFAR-10 and a controlled Fashion-MNIST ablation study, implemented and evaluated with PyTorch.

  • StatusComplete
  • ContextMSc coursework
  • DatasetsCIFAR-10 & Fashion-MNIST
  • Primary languagePython

Two connected experiments investigate architecture design, optimisation and generalisation in image classification.

For CIFAR-10, I implemented a CNN whose intermediate blocks learn input-dependent weights for several parallel convolutional paths. I improved the initial model by increasing width and path count, adding augmentation and refining optimisation. For Fashion-MNIST, I compared four variants under the same 10-epoch budget to isolate the effects of batch normalisation, dropout and augmentation.

The notebooks retain training histories, evaluation outputs and plots, while the report documents the methodology and limitations.

  • Python
  • PyTorch
  • torchvision
  • NumPy
  • Matplotlib
  • Jupyter Notebook
  • Google Colab
  • CUDA
87.81%

CIFAR-10

Best test accuracy from the improved model, recorded at epoch 27.

+3.05 pp

Improvement

Gain over the initial CIFAR-10 model's 84.76% result.

92.50%

Fashion-MNIST

Best result, produced by the BatchNorm CNN with dropout.

The network dynamically combines parallel convolutional transformations for each input.

Each intermediate block sends the same feature map through independent convolutional paths. Channel-wise spatial averages pass through a fully connected layer and softmax to generate combination coefficients. Four blocks increase channel depth while max pooling reduces spatial resolution from 32×32 to 4×4 before the final ten-class output.

Four-block CIFAR-10 network showing channel progression and max-pooling stages
Improved CIFAR-10 network from image input to class logits.
Input-conditioned intermediate block with parallel convolutional paths and learned combination weights
The input-conditioned intermediate block used throughout the network.

The improved CIFAR-10 model used random cropping, horizontal flipping, cross-entropy loss, AdamW, weight decay and cosine-annealing learning-rate scheduling. Loss declined while test accuracy peaked at 87.81%; the widening train-test gap provided evidence of some overfitting.

CIFAR-10 training and test accuracy over 30 epochs
Training and test accuracy across the preserved 30-epoch run.
CIFAR-10 cross-entropy training loss by batch
Batch-level training loss across the same run.
Fashion-MNIST protocol branching into four controlled CNN variants
Shared protocol and best test accuracy for each ablation-study variant.
Test-accuracy curves for four Fashion-MNIST CNN variants
Test accuracy per epoch across the four Fashion-MNIST models.

Tensor consistency

Maintaining compatible dimensions across parallel paths and their weighted combination.

Generalisation

Improving test performance while monitoring a growing training-to-test gap.

Controlled comparison

Holding the Fashion-MNIST budget constant so architectural changes remained interpretable.

Evaluation limits

Recognising the effect of repeated test evaluation, single runs and a short augmentation budget.

  • How to translate a custom architecture into reusable PyTorch modules.
  • Why training and test curves must be interpreted together when diagnosing overfitting.
  • How batch normalisation, dropout and augmentation affect optimisation and generalisation differently.
  • Why validation splits, repeated seeds and summary statistics matter for reliable model selection.
  • How to preserve results and document limitations so experiments remain auditable.

The repository contains both notebooks, recorded outputs, diagrams, figures, requirements and reports.