Deep Learning (DL)

Work with neural networks for images, language, and complex pattern recognition.

Level: Beginner–Advanced Beginner: 3 months β€’ Intermediate: 6 months β€’ Advanced: 1 year Contact for pricing

Prerequisites

Basic understanding of Machine Learning is recommended before starting Deep Learning.

Certificate

Awarded by Rescue Academy on successful completion of the program's assessments and final project.

Learn Online β€” Live Classes

Register, receive your schedule, and join live instructor-led Deep Learning (DL) classes on Zoom. Assignments, instructor feedback, and a certificate on completion.

Learn In Person

Attend Deep Learning (DL) classes in person in Juba with hands-on labs, instructor mentorship, and a certificate on completion.

What You'll Learn

  • Neural network basics: layers and activation
  • Training intuition: loss, gradients, optimization
  • Computer vision basics (images and CNN idea)
  • Text basics (tokens and embeddings concept)
  • Practical limits: data, compute, and responsible use

Curriculum

Beginner

Full lessons available below

Module 1: Introduction to Artificial Neural Networks (ANNs)

Learning objectives

  • Understand how a neural network processes information

Lessons

  • Neurons, Weights & Activations
  • Forward Pass Basics

Module 2: Convolutional Neural Networks (CNNs) for Computer Vision

Learning objectives

  • Understand how CNNs process images

Lessons

  • Convolutions & Filters
  • Building a Simple Image Classifier

Module 3: Recurrent Neural Networks (RNNs) for Sequence Data

Learning objectives

  • Understand how RNNs handle sequential data

Lessons

  • Sequence Data & RNN Basics
  • Where RNNs Are Used

Module 4: Transfer Learning & Pre-trained Models

Learning objectives

  • Reuse pre-trained models effectively

Lessons

  • What is Transfer Learning?
  • Fine-Tuning a Pre-trained Model

Module 5: Model Optimization: Loss Functions, Optimizers & Learning Rate

Learning objectives

  • Tune training for better results

Lessons

  • Loss Functions & Optimizers
  • Learning Rate & Training Stability

Intermediate

Outline β€” full lessons coming soon

Module 1: Deeper Architectures

Learning objectives

  • Understand deeper and more complex network designs

Lessons

  • Deeper CNN Architectures
  • Residual Connections Basics

Module 2: Working with Real Image/Text Datasets

Learning objectives

  • Prepare real-world data for deep learning

Lessons

  • Data Augmentation
  • Preparing Text Data for Models

Module 3: Training on Google Colab/GPUs

Learning objectives

  • Use accelerated hardware for training

Lessons

  • Using GPUs Effectively
  • Managing Training Time & Resources

Module 4: Model Evaluation for Deep Learning

Learning objectives

  • Evaluate deep learning models properly

Lessons

  • Validation Strategies
  • Diagnosing Under/Overfitting in DL

Module 5: Intermediate Project

Learning objectives

  • Train a deep learning model on a real dataset

Lessons

  • Planning a DL Project
  • Train, Evaluate & Present

Advanced

Outline β€” full lessons coming soon

Module 1: Advanced Architectures

Learning objectives

  • Understand modern advanced architectures conceptually

Lessons

  • Attention Mechanisms (Conceptual)
  • Where Transformers Are Used

Module 2: Model Deployment for Deep Learning

Learning objectives

  • Move a deep learning model toward production

Lessons

  • Exporting & Serving DL Models
  • Performance Considerations

Module 3: Responsible Deep Learning

Learning objectives

  • Apply DL responsibly given its risks

Lessons

  • Bias in Deep Learning Systems
  • Compute Cost & Environmental Considerations

Module 4: Research-Style Experimentation

Learning objectives

  • Run structured experiments like a practitioner

Lessons

  • Structuring Experiments
  • Reading & Applying a Research Idea

Module 5: Capstone Project

Learning objectives

  • Build and present a complete deep learning solution

Lessons

  • Planning the Capstone
  • Train, Evaluate & Present

Full Lessons β€” Beginner Level

1. Introduction to Artificial Neural Networks (ANNs)

An Artificial Neural Network (ANN) is inspired by the human brain. It consists of layers of artificial neurons β€” an input layer, one or more hidden layers, and an output layer. Each connection between neurons has a weight and each neuron has a bias. As data flows through the network, an activation function (like ReLU or Sigmoid) decides whether a neuron should "fire," allowing the network to learn complex patterns.

  • Input layer: receives raw data (e.g., pixel values, sensor readings).
  • Hidden layers: extract increasingly abstract features β€” edges, shapes, objects.
  • Weights & biases: adjusted during training to minimize error (this is "learning").
  • Built and trained using PyTorch or TensorFlow/Keras in Google Colab or Jupyter Notebooks.

πŸ’‘ Practical Skill: Use Google Colab (free GPU!) to build your first ANN. No local setup needed β€” just a browser. Start with a simple classifier like predicting pass/fail from study hours.

Try it Yourself β€” ANN with Keras (TensorFlow)

# A minimal Artificial Neural Network using TensorFlow/Keras
# Run in Google Colab or install: pip install tensorflow

import tensorflow as tf
import numpy as np

# Simple dataset: predict score (0-100) from hours studied
hours = np.array([1, 2, 3, 4, 5, 6, 7, 8], dtype=float)
scores = np.array([10, 25, 35, 48, 55, 68, 77, 90], dtype=float)

# Build a sequential ANN with 1 hidden layer
model = tf.keras.Sequential([
    # Input layer (1 neuron for 1 feature) + Hidden layer (8 neurons, ReLU)
    tf.keras.layers.Dense(8, activation='relu', input_shape=(1,)),
    # Output layer (1 neuron for the score prediction)
    tf.keras.layers.Dense(1)
])

# Compile: choose optimizer and loss function
model.compile(optimizer='adam', loss='mse')

# Train the network (epochs = passes over the data)
print("Training neural network...")
model.fit(hours, scores, epochs=300, verbose=0)
print("Training complete!")

# Predict: what score for 4.5 hours of study?
prediction = model.predict(np.array([4.5]), verbose=0)
print(f"Predicted score for 4.5 hours: {prediction[0][0]:.1f}%")
# Expected: around 55-65% (the network learned the pattern!)

2. Convolutional Neural Networks (CNNs) for Computer Vision

CNNs are specialized neural networks for image data. Instead of feeding raw pixels into a dense layer, CNNs use convolutional layers that slide small filters (kernels) across the image to detect features β€” edges, textures, shapes β€” at different scales. Pooling layers (like MaxPooling) downsample the image, keeping important features while reducing computation. This makes CNNs ideal for infrastructure inspection, flood mapping from satellite imagery, and medical image analysis.

  • Conv2D layer: applies learnable filters to detect visual patterns (edges, corners).
  • MaxPool2D layer: reduces image size, makes the model robust to small shifts.
  • CNNs automatically learn hierarchical features β€” from simple edges to complex objects.
  • Train on Google Colab with GPU acceleration; visualize filters with Matplotlib.

πŸ’‘ Practical Skill: Apply CNNs to satellite imagery for flood damage assessment or road condition monitoring in South Sudan. Use TensorFlow or PyTorch with Jupyter Notebooks to iterate quickly.

Try it Yourself β€” CNN Pipeline with Conv2D & MaxPool2D

# Building a CNN feature extractor using TensorFlow/Keras
# Shows how Conv2D and MaxPool2D layers work together

import tensorflow as tf

# Build a CNN pipeline (just the feature extraction part)
cnn_pipeline = tf.keras.Sequential([
    # First Conv2D: 32 filters, each 3x3, looking for edges and textures
    tf.keras.layers.Conv2D(
        filters=32,
        kernel_size=(3, 3),
        activation='relu',
        input_shape=(64, 64, 1)
    ),
    # MaxPool2D: reduces size from 64x64 to 32x32, keeps strongest features
    tf.keras.layers.MaxPool2D(pool_size=(2, 2)),

    # Second Conv2D: 64 filters, detects more complex shapes
    tf.keras.layers.Conv2D(
        filters=64,
        kernel_size=(3, 3),
        activation='relu'
    ),
    # MaxPool2D: reduces from 32x32 to 16x16
    tf.keras.layers.MaxPool2D(pool_size=(2, 2)),

    # Flatten: converts 2D feature maps into a 1D vector for the classifier
    tf.keras.layers.Flatten(),

    # Dense layer: makes the final decision (e.g., "flooded" vs "not flooded")
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# Print a summary of the architecture
cnn_pipeline.summary()

print("\n\u2705 CNN pipeline built! The model will automatically learn")
print("   to detect edges \u2192 shapes \u2192 objects from image data.")

3. Recurrent Neural Networks (RNNs) for Sequence Data

RNNs (Recurrent Neural Networks) are designed for sequential data β€” time series, text, audio, or sensor logs. Unlike regular neural networks, RNNs have a memory: they process inputs one step at a time and pass a "hidden state" from step to step. LSTMs (Long Short-Term Memory) are an advanced version that can remember information over long sequences, solving the "forgetting" problem of basic RNNs.

  • RNN/LSTM input shape: (batch_size, timesteps, features) β€” e.g., 30 days of 3 sensors.
  • LSTMs are used for weather forecasting, stock prediction, text generation, and speech recognition.
  • In South Sudan, LSTM models could predict river levels from historical sensor data for early flood warnings.
  • Use TensorFlow/Keras LSTM layer β€” simple to add to any model.

πŸ’‘ Practical Skill: Process time-series data from IoT sensors or weather stations. Clean the data in Jupyter Notebooks, structure it as sequences, and train an LSTM to make predictions.

Try it Yourself β€” LSTM for Sequence Prediction

# Setting up an LSTM model for time-series prediction
# Input: 10 timesteps, each with 1 feature (e.g., daily temperature)

import tensorflow as tf

# Define the LSTM model
model = tf.keras.Sequential([
    # LSTM layer: 50 memory units, expecting sequences of 10 steps
    # input_shape = (timesteps, features)
    tf.keras.layers.LSTM(50, activation='tanh', input_shape=(10, 1)),

    # Dense output layer: predict the next value
    tf.keras.layers.Dense(1)
])

# Compile the model
model.compile(optimizer='adam', loss='mse')

print("\u2705 LSTM model ready for sequence data!")
print(f"   Input shape: (batch_size, 10 timesteps, 1 feature)")
print(f"   Output: 1 value (next step prediction)")

# Show model architecture
model.summary()

# Example: simulate how you'd reshape raw sensor data
# Raw data: [25, 26, 27, 26, 25, 24, 23, 24, 25, 26, 27, 28]
# Sequences of 10 steps => predict the 11th value

print("\nData shape hint: reshape raw sensor logs to")
print("   (num_sequences, 10, 1) before training.")

4. Transfer Learning & Pre-trained Models

Transfer learning is one of the most powerful techniques in deep learning. Instead of training a massive model from scratch (which requires millions of images and weeks of GPU time), you take a pre-trained model β€” like ResNet50, MobileNet, or EfficientNet β€” that was already trained on millions of images (ImageNet). You remove the classification head and add your own custom layers for your specific task. This works even with very little data.

  • Pre-trained models have learned general visual features (edges, textures, shapes).
  • You "freeze" the early layers (they already know how to see) and only train the new head.
  • Perfect for custom tasks like detecting potholes, classifying crops, or mapping flooded areas.
  • Available in torchvision.models (PyTorch) and tf.keras.applications (TensorFlow).

πŸ’‘ Practical Skill: Fine-tune MobileNet for a custom dataset of South Sudanese infrastructure (roads, bridges, markets). Use Google Colab with a free GPU β€” training takes minutes, not days.

Try it Yourself β€” Load Pre-trained MobileNetV2 & Remove Head

# Loading a pre-trained MobileNetV2 and customizing it for a new task
# Install: pip install tensorflow

import tensorflow as tf

# Load MobileNetV2 pre-trained on ImageNet (1000 classes)
# We exclude the top (classification head) to add our own
base_model = tf.keras.applications.MobileNetV2(
    input_shape=(224, 224, 3),   # standard image size
    include_top=False,            # drop the classification head
    weights='imagenet'            # use pre-trained ImageNet weights
)

# Freeze the base model layers (they already know how to "see")
base_model.trainable = False

# Add our own custom classification head
model = tf.keras.Sequential([
    base_model,                          # pre-trained feature extractor
    tf.keras.layers.GlobalAveragePooling2D(),  # reduce dimensions
    tf.keras.layers.Dense(128, activation='relu'),  # new learning layer
    tf.keras.layers.Dropout(0.3),        # prevent overfitting
    tf.keras.layers.Dense(1, activation='sigmoid')  # binary output (e.g., flooded/not flooded)
])

# Compile β€” only the new head layers will train
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

print("\u2705 Pre-trained MobileNetV2 loaded with custom head!")
print(f"   Base model layers: {len(base_model.layers)} (frozen)")
print(f"   New head: GlobalAvgPool \u2192 Dense(128) \u2192 Dropout \u2192 Dense(1)")
print("\nTrain with your own images:")
print("   model.fit(train_images, train_labels, epochs=10)")
print("   For fine-tuning later, set base_model.trainable = True")

5. Model Optimization: Loss Functions, Optimizers & Learning Rate

Training a deep learning model is an optimization problem. The loss function measures how wrong the model's predictions are. The optimizer (like Adam) adjusts the weights to minimize the loss. The learning rate controls how big each adjustment is β€” too high and the model jumps around; too low and it learns painfully slowly. Choosing the right combination is key to fast, accurate training.

  • Loss functions: CrossEntropyLoss for classification, MSELoss for regression.
  • Adam optimizer: adapts learning rates per-parameter β€” works well out of the box for most tasks.
  • Learning rate schedulers: reduce the learning rate over time (e.g., ReduceLROnPlateau) for fine-grained convergence.
  • Monitor training with TensorBoard or simple accuracy/loss plots in Jupyter Notebooks.

πŸ’‘ Practical Skill: Start with Adam and a learning rate of 0.001. If the loss plateaus, use a scheduler to reduce the rate. Use Google Colab to experiment with different configurations quickly.

Try it Yourself β€” Loss Function & Optimizer Setup (PyTorch)

# Setting up loss function and optimizer in PyTorch
# Install: pip install torch

import torch
import torch.nn as nn
import torch.optim as optim

# --- Define a simple neural network ---
class SimpleNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(10, 32)   # input: 10 features
        self.fc2 = nn.Linear(32, 1)    # output: 1 value

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = SimpleNN()

# --- Step 1: Choose a loss function ---
# For binary classification (e.g., flooded / not flooded)
criterion = nn.BCEWithLogitsLoss()

# --- Step 2: Choose an optimizer ---
optimizer = optim.Adam(
    model.parameters(),
    lr=0.001  # learning rate: 0.001 is a great default for Adam
)

# --- Step 3: Optional learning rate scheduler ---
scheduler = optim.lr_scheduler.ReduceLROnPlateau(
    optimizer,
    mode='min',     # reduce when loss stops decreasing
    factor=0.5,     # cut learning rate in half
    patience=5      # wait 5 epochs before reducing
)

print("\u2705 Loss function: BCEWithLogitsLoss (binary classification)")
print("\u2705 Optimizer: Adam with lr=0.001")
print("\u2705 Scheduler: ReduceLROnPlateau (patience=5)")

# --- Simulate one training step ---
# Dummy data: batch of 8 samples, each with 10 features
inputs = torch.randn(8, 10)        # random input
labels = torch.randint(0, 2, (8, 1)).float()  # random labels (0 or 1)

# Forward pass
outputs = model(inputs)
loss = criterion(outputs, labels)

# Backward pass & optimization step
optimizer.zero_grad()  # clear previous gradients
loss.backward()        # compute gradients
optimizer.step()       # update weights

print(f"\nSample training step completed!")
print(f"   Loss: {loss.item():.4f} (should decrease over epochs)")
print(f"   Learning rate: {optimizer.param_groups[0]['lr']}")

Quick Quiz β€” Deep Learning Basics

What makes Convolutional Neural Networks (CNNs) especially good at image tasks?
What is transfer learning?

πŸ’‘ Quick Tip: You are reading the free online version of this lesson. To get a certificate, attend in-person training and complete all assessments. Practice deep learning using Google Colab (free GPU included!) β€” no installation needed. Start with the TensorFlow or PyTorch tutorials on their official websites.

Tools & Technologies

  • Python
  • Google Colab
  • Jupyter
  • TensorFlow
  • PyTorch

Career Opportunities

  • Data/AI analyst role at a bank, telecom, or NGO
  • Research or further-study pathway in AI/ML/Data Science
  • Remote/freelance AI or data work

Practical Projects

  • Train a CNN-based image classifier on a real dataset
  • Fine-tune a pre-trained model for a new task using transfer learning

Ready to register for Deep Learning (DL)?

WhatsApp: +211926196668 Email: rescueacademy26@gmail.com