Dog Breed Prediction — Custom CNN + Streamlit App
An end-to-end image classification project that trains a convolutional neural network from scratch to classify dog breeds, then serves predictions through a Streamlit web app.

About this project
Built and trained a custom CNN (no transfer learning) on the Kaggle Dog Breed Identification dataset to classify three breeds — Scottish Deerhound, Maltese, and Bernese Mountain Dog. Handled data prep, train/val/test splits, model design with L2 regularization, training in Google Colab, and deployed inference in a Streamlit app where users upload an image and get a breed prediction with confidence.
This project walks through a full ML workflow: loading and normalizing dog images (224×224, scaled to [0, 1]), one-hot encoding labels, splitting data (72% / 18% / 10%), designing a 4-layer CNN with mixed kernel sizes and decreasing filter counts, training with Adam and categorical crossentropy, and exporting a Keras model for a Streamlit front end. The goal was to build intuition around convolutional feature extraction, capacity control, and overfitting on small datasets — rather than maximizing accuracy with pretrained models.
Highlights
- Custom CNN from scratch (filters 64 → 32 → 16 → 8, mixed 5×5 / 3×3 / 7×7 kernels)
- Full training-to-deployment loop, not just a notebook
- Explicit design tradeoffs (capacity, learning rate, regularization) documented in the README
- User-facing app: upload image → predict breed + confidence
Tech stack
- Deep learning — TensorFlow / Keras, NumPy, scikit-learn, Pandas, Matplotlib
- Image processing — Pillow (PIL)
- Web app — Streamlit
- Data & training — Kaggle Dog Breed Identification, Google Colab