{"id":51172282,"url":"https://github.com/nabilshadman/full-stack-deep-learning-python","last_synced_at":"2026-06-27T01:30:25.197Z","repository":{"id":353519801,"uuid":"1219759167","full_name":"nabilshadman/full-stack-deep-learning-python","owner":"nabilshadman","description":"Exercise files of the Full-Stack Deep Learning with Python course (LinkedIn Learning)","archived":false,"fork":false,"pushed_at":"2026-04-24T08:05:52.000Z","size":1807,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-24T09:46:26.559Z","etag":null,"topics":["artificial-intelligence","deep-learning","end-to-end-machine-learning","full-stack-development","hyperparameter-tuning","mlflow","mlops","optuna","python-development","pytorch"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/learning/full-stack-deep-learning-with-python-34351133/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nabilshadman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-24T07:32:32.000Z","updated_at":"2026-04-24T08:12:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nabilshadman/full-stack-deep-learning-python","commit_stats":null,"previous_names":["nabilshadman/full-stack-deep-learning-python"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nabilshadman/full-stack-deep-learning-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Ffull-stack-deep-learning-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Ffull-stack-deep-learning-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Ffull-stack-deep-learning-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Ffull-stack-deep-learning-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nabilshadman","download_url":"https://codeload.github.com/nabilshadman/full-stack-deep-learning-python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Ffull-stack-deep-learning-python/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34839004,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artificial-intelligence","deep-learning","end-to-end-machine-learning","full-stack-development","hyperparameter-tuning","mlflow","mlops","optuna","python-development","pytorch"],"created_at":"2026-06-27T01:30:23.920Z","updated_at":"2026-06-27T01:30:25.190Z","avatar_url":"https://github.com/nabilshadman.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Full-Stack Deep Learning with Python\n\n[![Python](https://img.shields.io/badge/Python-3.10%2B-blue?logo=python\u0026logoColor=white)](https://www.python.org/)\n[![PyTorch](https://img.shields.io/badge/PyTorch-2.x-EE4C2C?logo=pytorch\u0026logoColor=white)](https://pytorch.org/)\n[![MLflow](https://img.shields.io/badge/MLflow-2.x%20%7C%203.x-0194E2?logo=mlflow\u0026logoColor=white)](https://mlflow.org/)\n[![Optuna](https://img.shields.io/badge/Optuna-Hyperparameter%20Tuning-6B4FBB)](https://optuna.org/)\n[![Platform](https://img.shields.io/badge/Platform-Google%20Colab-F9AB00?logo=google-colab\u0026logoColor=white)](https://colab.research.google.com/)\n[![License](https://img.shields.io/badge/License-Educational%20Use%20Only-lightgrey)](#license)\n\nExercise files for the LinkedIn Learning course **[Full-Stack Deep Learning with Python](https://www.linkedin.com/learning/full-stack-deep-learning-with-python-34351133/)**, instructed by Janani Ravi (Loonycorn). The course covers the end-to-end ML lifecycle — from data preparation and model training to experiment tracking, hyperparameter optimization, and local model serving.\n\n---\n\n## Contents\n\n```\n├── datasets/\n│   └── (EMNIST letters train/test CSV files)\n├── demo_01_EMNISTClassificationUsingDNN.ipynb\n├── demo_02_EMNISTClassificationUsingCNN.ipynb\n└── demo_03_ModelDeployment.ipynb\n```\n\n| Notebook | Description |\n|---|---|\n| `demo_01_EMNISTClassificationUsingDNN.ipynb` | Loads and explores the EMNIST dataset, builds a DNN image classifier, and introduces MLflow experiment tracking with metrics and artifact logging. |\n| `demo_02_EMNISTClassificationUsingCNN.ipynb` | Implements a CNN-based classifier using PyTorch Lightning, logs runs via MLflow autologging, registers the trained model, and achieves ~91.7% test accuracy. |\n| `demo_03_ModelDeployment.ipynb` | Downloads a registered MLflow model, sets up a local virtual environment, and serves the model as a REST endpoint using `mlflow models serve`. |\n\n---\n\n## Prerequisites\n\n- Python 3.10 or later\n- A Google account (notebooks are designed for Google Colab with Google Drive)\n- An [ngrok](https://ngrok.com/) account and auth token (to tunnel the MLflow UI from Colab)\n- The EMNIST letters dataset from [Kaggle](https://www.kaggle.com/datasets/crawford/emnist) — `emnist-letters-train.csv` and `emnist-letters-test.csv`\n\n---\n\n## Setup\n\n### Google Colab (recommended)\n\nThe first two notebooks are designed to run on Google Colab with a T4 GPU runtime.\n\n1. Upload the EMNIST CSV files to your Google Drive under `MyDrive/emnist_data/`.\n2. Open the notebook in Colab and set the runtime to **T4 GPU** (`Runtime \u003e Change runtime type`).\n3. Run the installation cells at the top of each notebook. All required packages are installed inline.\n4. Set your ngrok auth token in the cell that references `NGROK_AUTH_TOKEN` before starting the MLflow UI.\n\n### Local Setup (demo_03 only)\n\nModel deployment is intended to run locally. From your terminal:\n\n```bash\nmkdir full_stack_deep_learning \u0026\u0026 cd full_stack_deep_learning\npython3 -m venv fsdl_venv\nsource fsdl_venv/bin/activate          # Windows: fsdl_venv\\Scripts\\activate\npip install --upgrade pip\npip install torch matplotlib numpy pandas mlflow pytorch_lightning\n```\n\nInstall the Jupyter kernel and launch the notebook:\n\n```bash\npip install ipykernel\npython -m ipykernel install --user --name=fsdl_venv\njupyter notebook\n```\n\nPlace the downloaded MLflow model artifacts under:\n\n```\nfull_stack_deep_learning/mlruns/best_model/\n```\n\nServe the model:\n\n```bash\nmlflow models serve -m mlruns/best_model --env-manager local --host 127.0.0.1 --port 1234\n```\n\n---\n\n## Key Dependencies\n\n| Package | Purpose |\n|---|---|\n| `torch` / `pytorch_lightning` | Model definition and training |\n| `mlflow` | Experiment tracking, model registry, and serving |\n| `optuna` | Hyperparameter optimization (covered in course Chapter 4) |\n| `pyngrok` | Tunnel MLflow UI from Colab to a public URL |\n| `torchmetrics` | Accuracy and other training metrics |\n| `matplotlib` / `seaborn` | Visualization |\n\n---\n\n## Course Overview\n\nThis repository accompanies the following chapters:\n\n1. **An Overview of Full-Stack Deep Learning** — Components, artifacts, and tooling across the ML lifecycle.\n2. **MLOps with MLflow** — Setting up MLflow, running the tracking UI, and understanding the ML operations workflow.\n3. **Model Training and Evaluation Using MLflow** — Training DNN and CNN models on EMNIST, logging parameters, metrics, and artifacts.\n4. **Hyperparameter Tuning with Optuna** — Defining objective functions, running optimization trials, identifying the best model, and registering it.\n5. **Model Deployment and Predictions** — Serving a registered MLflow model locally and querying it over HTTP.\n\n---\n\n## Notes\n\n- The ngrok auth tokens visible in the notebooks are session-specific and have been rotated. Replace them with your own token from the [ngrok dashboard](https://dashboard.ngrok.com/auth).\n- Pixel values in the EMNIST CSVs are in the range [0, 255] and require normalization. Labels start at 1 and are shifted to 0-indexed in the dataset class.\n- The CNN in `demo_02` reaches approximately **91.7% test accuracy** after 10 epochs on the EMNIST letters split.\n\n---\n\n## License\n\nThese materials are provided for educational use only. All rights belong to LinkedIn Learning and the original instructor. Redistribution for commercial purposes is strictly prohibited.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnabilshadman%2Ffull-stack-deep-learning-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnabilshadman%2Ffull-stack-deep-learning-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnabilshadman%2Ffull-stack-deep-learning-python/lists"}