Back to projects

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.

PythonTensorFlow / KerasCNNStreamlitComputer VisionGoogle ColabKaggle
Dog Breed Prediction
Custom CNN from scratch · upload an image → breed + confidence
Dog Breed Prediction — CNN + Streamlit

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
GitHub

© 2026 Kelvin R. Tobias

Kelvinintech Consulting LLC · Kinston, North Carolina

Contact·Front Door·LinkedIn

KRT