Deep Learning Projects Complete Guide
Deep Learning Projects Complete Guide
1. Problem overview
2. Dataset (with real download link)
3. Environment setup commands
4. Project folder structure
5. Full code — preprocessing → model → training → evaluation
6. Explainability / visualization
7. Deployment (Streamlit dashboard)
8. Exact terminal commands to run everything
All code uses Python 3.10+, TensorFlow/Keras, scikit-learn, pandas, and Streamlit. Every project can be built and demoed in Cursor /
VS Code the same way, so once you do Project 1 carefully, the rest go much faster.
# Activate it
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
# Upgrade pip
pip install --upgrade pip
To download Kaggle datasets via command line, set up the Kaggle API once:
1
1. Feedforward Neural Network (FNN)
1.1 Overview
Predict whether an employee is likely to leave the company using structured/tabular HR data (age, salary, satisfaction scores, overtime,
promotion history, etc.), then explain why using SHAP and surface results on a dashboard.
1.2 Dataset
IBM HR Analytics Employee Attrition & Performance Dataset (Kaggle, ~1,470 rows, 35 columns) Link: [Link]
datasets/pavansubhasht/ibm-hr-analytics-attrition-dataset
attrition-fnn/
├── data/[Link]
├── [Link]
├── [Link]
├── [Link]
├── [Link]
└── model/attrition_model.h5
2
1.4 Preprocessing ( [Link] )
import pandas as pd
from sklearn.model_selection import train_test_split
from [Link] import StandardScaler, LabelEncoder
import joblib
df = pd.read_csv("data/[Link]")
# Encode target
df["Attrition"] = df["Attrition"].map({"Yes": 1, "No": 0})
X = [Link](columns=["Attrition"])
y = df["Attrition"]
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = [Link](X_test)
[Link](scaler, "model/[Link]")
[Link](encoders, "model/[Link]")
[Link]((X_train_scaled, X_test_scaled, y_train, y_test, [Link]()), "model/[Link]")
print("Preprocessing complete:", X_train_scaled.shape, X_test_scaled.shape)
3
1.5 Model + Training ( [Link] )
import joblib
import tensorflow as tf
from [Link] import layers, models, callbacks
from [Link] import classification_report, roc_auc_score
model = [Link]([
[Link](shape=(X_train.shape[1],)),
[Link](64, activation="relu"),
[Link](0.3),
[Link](32, activation="relu"),
[Link](0.2),
[Link](16, activation="relu"),
[Link](1, activation="sigmoid")
])
history = [Link](
X_train, y_train,
validation_split=0.2,
epochs=100,
batch_size=32,
callbacks=[early_stop],
verbose=1
)
[Link]("model/attrition_model.h5")
import shap
import joblib
import tensorflow as tf
model = [Link].load_model("model/attrition_model.h5")
X_train, X_test, y_train, y_test, feature_names = [Link]("model/[Link]")
4
1.7 Dashboard ( [Link] )
import streamlit as st
import joblib
import tensorflow as tf
import numpy as np
import pandas as pd
if uploaded:
df = pd.read_csv(uploaded)
df_scaled = [Link](df[feature_names])
risk_scores = [Link](df_scaled).flatten()
df["Attrition_Risk_%"] = (risk_scores * 100).round(2)
[Link](df.sort_values("Attrition_Risk_%", ascending=False))
st.bar_chart(df.set_index([Link][0])["Attrition_Risk_%"])
python [Link]
python [Link]
python [Link]
streamlit run [Link]
5
2. Convolutional Neural Network (CNN)
2.1 Overview
Classify satellite image patches into land-cover categories (urban, agricultural, forest, water, barren, wetland) using CNN + transfer
learning, then visualize environmental trends.
2.2 Dataset
EuroSAT — Sentinel-2 satellite images, 27,000 labeled 64x64 patches, 10 classes. Link: [Link]
apollo2506/eurosat-dataset (Also available via TensorFlow Datasets: [Link]('eurosat') )
landcover-cnn/
├── data/EuroSAT/<class_folders>/
├── [Link]
├── [Link]
├── [Link]
└── model/landcover_cnn.h5
6
2.4 Data Pipeline + Model ( [Link] )
import tensorflow as tf
from [Link] import layers, models
from [Link] import MobileNetV2
train_ds = [Link].image_dataset_from_directory(
"data/EuroSAT", validation_split=0.2, subset="training",
seed=42, image_size=IMG_SIZE, batch_size=BATCH
)
val_ds = [Link].image_dataset_from_directory(
"data/EuroSAT", validation_split=0.2, subset="validation",
seed=42, image_size=IMG_SIZE, batch_size=BATCH
)
class_names = train_ds.class_names
print("Classes:", class_names)
# Augmentation
augment = [Link]([
[Link]("horizontal_and_vertical"),
[Link](0.2),
[Link](0.1),
])
AUTOTUNE = [Link]
train_ds = train_ds.map(lambda x, y: (augment(x, training=True), y)).prefetch(AUTOTUNE)
val_ds = val_ds.prefetch(AUTOTUNE)
model = [Link]([
[Link](1./255),
base_model,
layers.GlobalAveragePooling2D(),
[Link](128, activation="relu"),
[Link](0.3),
[Link](len(class_names), activation="softmax")
])
[Link]("model/landcover_cnn.h5")
import json
[Link](class_names, open("model/class_names.json", "w"))
7
2.5 Evaluation ( [Link] )
import tensorflow as tf
import numpy as np
import json
from [Link] import confusion_matrix, classification_report
import seaborn as sns
import [Link] as plt
model = [Link].load_model("model/landcover_cnn.h5")
class_names = [Link](open("model/class_names.json"))
val_ds = [Link].image_dataset_from_directory(
"data/EuroSAT", validation_split=0.2, subset="validation",
seed=42, image_size=(64, 64), batch_size=32
)
import streamlit as st
import tensorflow as tf
import numpy as np
import json
from PIL import Image
python [Link]
python [Link]
streamlit run [Link]
8
3. Recurrent Neural Network (RNN)
3.1 Overview
Learn sequential purchasing patterns from transaction history and predict the next product category a customer is likely to buy.
3.2 Dataset
Online Retail II Dataset (UCI / Kaggle) — ~1M transaction rows, UK-based online retailer. Link: [Link]
mashlyn/online-retail-ii-uci
purchase-rnn/
├── data/online_retail_II.csv
├── build_sequences.py
├── [Link]
├── [Link]
└── model/purchase_rnn.h5
import pandas as pd
import numpy as np
from [Link] import pad_sequences
from [Link] import LabelEncoder
import joblib
df = pd.read_csv("data/online_retail_II.csv", encoding="ISO-8859-1")
df = [Link](subset=["Customer ID", "Description"])
df = df.sort_values(["Customer ID", "InvoiceDate"])
le = LabelEncoder()
df["ItemCode"] = le.fit_transform(df["Description"])
X, y = [], []
SEQ_LEN = 5
for seq in sequences:
for i in range(len(seq) - SEQ_LEN):
[Link](seq[i:i+SEQ_LEN])
[Link](seq[i+SEQ_LEN])
X = pad_sequences(X, maxlen=SEQ_LEN)
y = [Link](y)
9
3.5 Model + Training ( [Link] )
import joblib
import tensorflow as tf
from [Link] import layers, models
from sklearn.model_selection import train_test_split
X, y, le = [Link]("model/[Link]")
vocab_size = len(le.classes_)
model = [Link]([
[Link](input_dim=vocab_size, output_dim=64, input_length=[Link][1]),
[Link](128, return_sequences=False),
[Link](0.3),
[Link](128, activation="relu"),
[Link](vocab_size, activation="softmax")
])
[Link]("model/purchase_rnn.h5")
import joblib
import tensorflow as tf
import numpy as np
from [Link] import pad_sequences
model = [Link].load_model("model/purchase_rnn.h5")
X, y, le = [Link]("model/[Link]")
# Example
sample_seq = list(le.inverse_transform(X[0]))
print("History:", sample_seq)
print("Recommended next items:", recommend_next(sample_seq))
python build_sequences.py
python [Link]
python [Link]
10
4. Long Short-Term Memory (LSTM)
4.1 Overview
Forecast future Air Quality Index (AQI) values using historical pollution, weather, and atmospheric readings, with anomaly detection for
unusual spikes.
4.2 Dataset
Air Quality Data in India (2015–2020) — station-wise hourly/daily pollutant readings. Link: [Link]
rohanrao/air-quality-data-in-india
aqi-lstm/
├── data/city_day.csv
├── [Link]
├── [Link]
├── [Link]
├── [Link]
└── model/aqi_lstm.h5
import pandas as pd
import numpy as np
from [Link] import MinMaxScaler
import joblib
df = pd.read_csv("data/city_day.csv", parse_dates=["Date"])
city_df = df[df["City"] == "Delhi"].sort_values("Date")
city_df = city_df[["Date", "PM2.5", "PM10", "NO2", "CO", "SO2", "O3", "AQI"]].dropna()
scaler = MinMaxScaler()
scaled = scaler.fit_transform(city_df.drop(columns=["Date"]))
X, y = [Link](X), [Link](y)
split = int(len(X) * 0.85)
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]
11
4.5 Model + Training ( [Link] )
import joblib
from [Link] import layers, models, callbacks
model = [Link]([
[Link](shape=(X_train.shape[1], X_train.shape[2])),
[Link](64, return_sequences=True),
[Link](0.2),
[Link](32),
[Link](16, activation="relu"),
[Link](1)
])
[Link]("model/aqi_lstm.h5")
import joblib
import tensorflow as tf
import numpy as np
model = [Link].load_model("model/aqi_lstm.h5")
X_train, X_test, y_train, y_test, scaler, city_df = [Link]("model/[Link]")
preds = [Link](X_test).flatten()
residuals = [Link](preds - y_test)
threshold = [Link]() + 2 * [Link]()
anomalies = [Link](residuals > threshold)[0]
import streamlit as st
import joblib
import tensorflow as tf
import plotly.graph_objects as go
preds = [Link](X_test).flatten()
fig = [Link]()
fig.add_trace([Link](y=y_test, name="Actual AQI (scaled)"))
fig.add_trace([Link](y=preds, name="Predicted AQI (scaled)"))
st.plotly_chart(fig, use_container_width=True)
python [Link]
python [Link]
python [Link]
streamlit run [Link]
12
5. Gated Recurrent Unit (GRU)
5.1 Overview
Forecast future electricity demand using historical hourly energy usage, enabling smart-grid load balancing.
5.2 Dataset
Hourly Energy Consumption (PJM Interconnection) — multi-year hourly MW readings. Link: [Link]
robikscube/hourly-energy-consumption
energy-gru/
├── data/PJME_hourly.csv
├── [Link]
├── [Link]
├── [Link]
└── model/energy_gru.h5
import pandas as pd
import numpy as np
from [Link] import MinMaxScaler
import joblib
df = pd.read_csv("data/PJME_hourly.csv", parse_dates=["Datetime"])
df = df.sort_values("Datetime")
df["hour"] = df["Datetime"].[Link]
df["dayofweek"] = df["Datetime"].[Link]
df["month"] = df["Datetime"].[Link]
X, y = [Link](X), [Link](y)
split = int(len(X) * 0.9)
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]
13
5.5 Model + Training ( [Link] )
import joblib
from [Link] import layers, models, callbacks
model = [Link]([
[Link](shape=(X_train.shape[1], X_train.shape[2])),
[Link](64, return_sequences=True),
[Link](0.2),
[Link](32),
[Link](16, activation="relu"),
[Link](1)
])
[Link]("model/energy_gru.h5")
import joblib
import tensorflow as tf
import [Link] as plt
from [Link] import mean_absolute_error, mean_squared_error
model = [Link].load_model("model/energy_gru.h5")
X_train, X_test, y_train, y_test, scaler = [Link]("model/[Link]")
preds = [Link](X_test).flatten()
print("MAE:", mean_absolute_error(y_test, preds))
print("RMSE:", mean_squared_error(y_test, preds, squared=False))
[Link](figsize=(12, 4))
[Link](y_test[:200], label="Actual")
[Link](preds[:200], label="Predicted")
[Link]()
[Link]("Energy Demand Forecast (sample window)")
[Link]("model/forecast_plot.png")
python [Link]
python [Link]
python [Link]
14
6. Autoencoder
6.1 Overview
Train an autoencoder only on normal (non-fraud) transactions so it learns to reconstruct them well. Fraudulent transactions produce high
reconstruction error, flagging them as anomalies — with a real-time monitoring dashboard.
6.2 Dataset
Credit Card Fraud Detection Dataset (Kaggle / ULB) — 284,807 transactions, 492 frauds, PCA-anonymized features. Link: https://
[Link]/datasets/mlg-ulb/creditcardfraud
fraud-autoencoder/
├── data/[Link]
├── [Link]
├── [Link]
├── [Link]
└── model/fraud_autoencoder.h5
15
6.4 Model + Training ( [Link] )
import pandas as pd
import numpy as np
from [Link] import StandardScaler
from sklearn.model_selection import train_test_split
from [Link] import layers, models, callbacks
import joblib
df = pd.read_csv("data/[Link]")
X = [Link](columns=["Class"])
y = df["Class"]
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
input_dim = X_train_normal.shape[1]
model = [Link]([
[Link](shape=(input_dim,)),
[Link](20, activation="relu"),
[Link](10, activation="relu"),
[Link](20, activation="relu"),
[Link](input_dim, activation="linear")
])
[Link](optimizer="adam", loss="mse")
es = [Link](patience=5, restore_best_weights=True)
[Link](X_train_normal, X_train_normal, epochs=50, batch_size=256,
validation_split=0.1, callbacks=[es])
[Link]("model/fraud_autoencoder.h5")
[Link]((X_test, y_test, scaler), "model/test_data.pkl")
import joblib
import tensorflow as tf
import numpy as np
from [Link] import classification_report, precision_recall_curve
model = [Link].load_model("model/fraud_autoencoder.h5")
X_test, y_test, scaler = [Link]("model/test_data.pkl")
reconstructions = [Link](X_test)
mse = [Link]([Link](X_test - reconstructions), axis=1)
[Link](best_threshold, "model/[Link]")
16
6.6 Real-Time Monitoring Dashboard ( [Link] )
import streamlit as st
import joblib
import tensorflow as tf
import numpy as np
import pandas as pd
python [Link]
python [Link]
streamlit run [Link]
17
7. Generative Adversarial Network (GAN)
7.1 Overview
Train a GAN to generate realistic but fully synthetic patient records (demographic + clinical features), enabling privacy-safe research data
sharing.
7.2 Dataset
Diabetes Health Indicators Dataset (Kaggle, CDC BRFSS-derived, ~250K records, demographic + clinical fields) — used as the real-
data source the GAN learns from. Link: [Link]
synthetic-health-gan/
├── data/diabetes_binary_health_indicators_BRFSS2015.csv
├── train_gan.py
├── [Link]
└── model/generator.h5
18
7.4 GAN Model + Training ( train_gan.py )
import pandas as pd
import numpy as np
from [Link] import MinMaxScaler
import tensorflow as tf
from [Link] import layers, models
import joblib
df = pd.read_csv("data/diabetes_binary_health_indicators_BRFSS2015.csv")
scaler = MinMaxScaler()
data = scaler.fit_transform([Link])
n_features = [Link][1]
LATENT_DIM = 32
def build_generator():
return [Link]([
[Link](shape=(LATENT_DIM,)),
[Link](64, activation="relu"),
[Link](128, activation="relu"),
[Link](n_features, activation="sigmoid")
])
def build_discriminator():
return [Link]([
[Link](shape=(n_features,)),
[Link](128, activation="relu"),
[Link](0.3),
[Link](64, activation="relu"),
[Link](1, activation="sigmoid")
])
generator = build_generator()
discriminator = build_discriminator()
[Link](optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
[Link] = False
gan_input = [Link](shape=(LATENT_DIM,))
gan_output = discriminator(generator(gan_input))
gan = [Link](gan_input, gan_output)
[Link](optimizer="adam", loss="binary_crossentropy")
BATCH = 128
EPOCHS = 3000
for epoch in range(EPOCHS):
idx = [Link](0, [Link][0], BATCH)
real = data[idx]
noise = [Link](0, 1, (BATCH, LATENT_DIM))
fake = [Link](noise, verbose=0)
[Link] = True
d_loss_real = discriminator.train_on_batch(real, [Link]((BATCH, 1)))
d_loss_fake = discriminator.train_on_batch(fake, [Link]((BATCH, 1)))
[Link] = False
if epoch % 200 == 0:
print(f"Epoch {epoch} | D_real: {d_loss_real[0]:.4f} D_fake: {d_loss_fake[0]:.4f} G_loss: {g_loss:.
4f}")
[Link]("model/generator.h5")
[Link](scaler, "model/[Link]")
19
7.5 Quality + Privacy Evaluation ( [Link] )
import numpy as np
import pandas as pd
import tensorflow as tf
import joblib
from [Link] import ks_2samp
generator = [Link].load_model("model/generator.h5")
scaler = [Link]("model/[Link]")
df = pd.read_csv("data/diabetes_binary_health_indicators_BRFSS2015.csv")
real = [Link]([Link])
synthetic_df.to_csv("model/synthetic_patients.csv", index=False)
print("Synthetic dataset saved.")
python train_gan.py
python [Link]
20
8. Transformer
8.1 Overview
Use transformer sentence embeddings on paper abstracts to power semantic search, recommendations, topic clustering, and extractive/
abstractive summaries — wrapped in a web app for researchers.
8.2 Dataset
arXiv Dataset (Kaggle, Cornell University) — 1.7M+ paper metadata records (title, abstract, categories, authors). Link: https://
[Link]/datasets/Cornell-University/arxiv
paper-recommender-transformer/
├── data/[Link]
├── build_index.py
├── [Link]
├── [Link]
└── model/[Link]
import json
import pandas as pd
import numpy as np
from sentence_transformers import SentenceTransformer
from [Link] import KMeans
records = []
with open("data/[Link]") as f:
for i, line in enumerate(f):
if i >= 20000: # sample for a manageable local index
break
[Link]([Link](line))
model = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = [Link](df["text"].tolist(), show_progress_bar=True, batch_size=64)
[Link]("model/[Link]", embeddings)
df.to_pickle("model/[Link]")
print("Index built:", [Link])
21
8.6 Summarization ( [Link] )
if __name__ == "__main__":
import pandas as pd
df = pd.read_pickle("model/[Link]")
sample = [Link][0]["abstract"]
print("Original:", sample[:200], "...")
print("Summary:", summarize_abstract(sample))
import streamlit as st
import numpy as np
import pandas as pd
from sentence_transformers import SentenceTransformer
from [Link] import cosine_similarity
@st.cache_resource
def load_resources():
model = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = [Link]("model/[Link]")
df = pd.read_pickle("model/[Link]")
return model, embeddings, df
python build_index.py
python [Link]
streamlit run [Link]
22
Appendix A — Common Issues & Fixes
Issue Fix
Kaggle API 403 error Regenerate [Link] , check chmod 600 permission
CUDA/GPU not detected pip install tensorflow[and-cuda] or run on CPU (all code above works CPU-only, just slower)
Out-of-memory during training Reduce batch_size , or sample fewer rows (as done in the transformer index step)
23
Appendix B — Freeze Your Environment (for resume/GitHub)
24
Appendix C — Resume Bullet Templates
• Built an FNN-based employee attrition predictor (Keras, SHAP) with 85%+ ROC-AUC and an interactive Streamlit risk dashboard.
• Developed a CNN transfer-learning pipeline (MobileNetV2) achieving 90%+ accuracy on 10-class satellite land-cover
classification (EuroSAT).
• Designed an LSTM forecasting system for AQI prediction with anomaly detection, deployed via Plotly/Streamlit dashboard.
• Implemented a GAN for privacy-preserving synthetic healthcare data generation, validated with KS-statistic similarity testing.
• Built a Transformer-based semantic search and summarization app over 20K+ arXiv papers using Sentence-BERT and BART.
End of guide. Each project folder is self-contained — copy the relevant section's commands into Cursor/VS Code terminal and run top to
bottom.
25