Apple Silicon Macs accelerate PyTorch via the MPS backend - no CUDAโฆ
Greetings, brave adventurer! You have built a neural network from raw NumPy and felt every gradient with your own hands. That was the forge of understanding. Now you step into the Armory of the Deep Engines, where two legendary frameworks - PyTorch and TensorFlow - turn that hard-won understanding into models that train on millions of examples across banks of GPUs. This quest, Deep Learning Frameworks, is where you trade your hand tools for the machinery that practitioners actually ship.
Whether you have only watched others type model.fit() or you already sense the difference between a tensor and an array, this adventure will leave you fluent in the two libraries that power nearly all modern AI.
๐ The Legend Behind This Quest¶
Once, every researcher computed gradients by hand - a slow, error-prone ritual. Then came automatic differentiation: a machine that records every operation you perform and replays it backward to compute exact gradients for free. PyTorch and TensorFlow are both built on this single magic. Master the magic and you can train any architecture you can describe.
PyTorch, born at Meta, won the research world with its eager, Pythonic feel - your model is just code that runs line by line. TensorFlow, born at Google, brought production-grade deployment and, with Keras, a friendly high-level API. Today the gap has narrowed: both do eager execution, both compile for speed, both run on GPUs and TPUs. Knowing both makes you dangerous.
๐ฏ Quest Objectives¶
By the time you complete this journey, you will have mastered:
Primary Objectives (Required for Quest Completion)¶
- Tensors - Create, reshape, and broadcast tensors and move them to a device
- Automatic Differentiation - Use autograd to compute gradients without hand-derivation
- The Training Loop - Write the forward / loss / backward / step cycle from scratch in PyTorch
- Framework Fluency - Build the same model in PyTorch and in TensorFlow/Keras and compare
Secondary Objectives (Bonus Achievements)¶
- GPU Acceleration - Detect and use a GPU (CUDA or Apple MPS) when available
- Datasets & Loaders - Batch data efficiently with
DataLoader - Saving & Loading - Persist a trained model's weights and reload them
Mastery Indicators¶
You'll know you've truly mastered this quest when you can:
- [ ] Explain to a friend what loss.backward() actually does
- [ ] Decide between PyTorch and TensorFlow for a given project
- [ ] Debug a shape-mismatch error without panic
- [ ] Move a model and its data to a GPU without device errors
๐บ๏ธ Quest Prerequisites¶
๐ Knowledge Requirements¶
- Completion of the Neural Networks quest (or equivalent backprop intuition)
- Comfortable with NumPy arrays, slicing, and Python functions
- A loss function and gradient are not scary words to you
๐ ๏ธ System Requirements¶
- Modern operating system (Windows 10+, macOS 10.14+, or Linux)
- Python 3.10 or newer on your PATH
- A text editor or IDE (VS Code) or a Jupyter environment
- Internet connection for installing packages
๐ง Skill Level Indicators¶
This ๐ด Hard quest expects: - [ ] You have trained at least one model before - [ ] You are ready to reason about tensor shapes and devices - [ ] Ready for 4-5 hours of focused, hands-on learning
๐ Choose Your Adventure Platform¶
Deep learning frameworks are cross-platform, but GPU support differs. Create an isolated environment so your spells do not collide.
๐ macOS Kingdom Path¶
Click to expand macOS instructions
# Apple Silicon Macs accelerate PyTorch via the MPS backend - no CUDA needed.
python3 -m venv ~/dl-quest && source ~/dl-quest/bin/activate
pip install --upgrade pip
pip install torch torchvision tensorflow numpy matplotlib
# Verify; on Apple Silicon, MPS should report True
python -c "import torch; print('torch', torch.__version__, 'mps', torch.backends.mps.is_available())"
๐ช Windows Empire Path¶
Click to expand Windows instructions
python -m venv $HOME\dl-quest
& $HOME\dl-quest\Scripts\Activate.ps1
pip install --upgrade pip
# CPU build works everywhere. For an NVIDIA GPU, follow pytorch.org's selector for the matching CUDA wheel.
pip install torch torchvision tensorflow numpy matplotlib
python -c "import torch; print('torch', torch.__version__, 'cuda', torch.cuda.is_available())"
๐ง Linux Territory Path¶
Click to expand Linux instructions
sudo apt update && sudo apt install -y python3-venv python3-pip
python3 -m venv ~/dl-quest && source ~/dl-quest/bin/activate
pip install --upgrade pip
pip install torch torchvision tensorflow numpy matplotlib
python -c "import torch; print('torch', torch.__version__, 'cuda', torch.cuda.is_available())"
โ๏ธ Cloud Realms Path¶
Click to expand Cloud/Container instructions
๐งโโ๏ธ Chapter 1: Tensors - The Atoms of Deep Learning¶
A tensor is just a multi-dimensional array - like a NumPy array, but with two superpowers: it can live on a GPU, and it can remember the operations performed on it so gradients can flow back through them.
โ๏ธ Skills You'll Forge in This Chapter¶
- Creating, reshaping, and broadcasting tensors
- Moving tensors between CPU and GPU
- Seeing the bridge between NumPy and PyTorch
๐๏ธ Working With Tensors¶
import torch
# A tensor from a Python list; note its shape and dtype
x = torch.tensor([[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0]])
print(x.shape, x.dtype) # torch.Size([2, 3]) torch.float32
# Reshape (view) without copying data
print(x.view(3, 2))
# Broadcasting: a (2,3) tensor plus a (3,) tensor adds row-wise
bias = torch.tensor([10.0, 20.0, 30.0])
print(x + bias)
# Matrix multiply - the core operation of every dense layer
w = torch.randn(3, 4) # random weights
print((x @ w).shape) # torch.Size([2, 4])
# Pick the best available device once, reuse it everywhere
device = (
"cuda" if torch.cuda.is_available()
else "mps" if torch.backends.mps.is_available()
else "cpu"
)
x = x.to(device)
print("Tensor now lives on:", x.device)
The single most common beginner error is mixing devices: a model on the GPU cannot multiply a tensor still on the CPU. Move both with .to(device).
๐ Knowledge Check: Tensors¶
- What two abilities make a tensor more than a NumPy array?
- What does broadcasting let you avoid writing?
- Why must a model and its input live on the same device?
โก Quick Wins and Checkpoints¶
- Environment ready:
import torchworks without error - Device chosen: You printed which device your tensors use
๐งโโ๏ธ Chapter 2: Autograd - Gradients for Free¶
In the Neural Networks quest you derived backpropagation by hand. Autograd does it automatically. Mark a tensor with requires_grad=True, run a computation, call .backward(), and the gradients appear in .grad.
โ๏ธ Skills You'll Forge in This Chapter¶
- Tracking computation with autograd
- Reading gradients off the computation graph
- Understanding why we zero gradients each step
๐๏ธ Autograd in Action¶
import torch
# Verify autograd on a function we can differentiate by hand: y = 3w^2 + 2w
w = torch.tensor(4.0, requires_grad=True)
y = 3 * w**2 + 2 * w
y.backward() # populate w.grad with dy/dw
# By calculus dy/dw = 6w + 2 = 6*4 + 2 = 26
print("autograd gradient:", w.grad.item()) # 26.0
Autograd builds a graph of every operation as it runs (this is "eager" execution). backward() walks that graph in reverse, applying the chain rule. Optimizers then nudge each parameter against its gradient. Because PyTorch accumulates gradients, you must call optimizer.zero_grad() before each new backward pass - forgetting this is the second most common bug in deep learning.
๐ Knowledge Check: Autograd¶
- What does
requires_grad=Truetell PyTorch to do? - What does
.backward()populate? - Why must gradients be zeroed each training step?
๐งโโ๏ธ Chapter 3: The Training Loop - The Heartbeat of Deep Learning¶
Every deep learning model, from a tiny classifier to a giant language model, trains with the same four-beat rhythm: forward pass, compute loss, backward pass, optimizer step. Learn it once and you have learned all of them.
โ๏ธ Skills You'll Forge in This Chapter¶
- Defining a model with
nn.Module - Writing the forward / loss / backward / step loop
- Tracking loss as the model learns
๐๏ธ A Complete PyTorch Training Loop¶
import torch
import torch.nn as nn
torch.manual_seed(0)
# Toy problem: learn the linear relationship y = 2x + 1 from noisy data
X = torch.linspace(-1, 1, 200).unsqueeze(1) # shape (200, 1)
y = 2 * X + 1 + 0.1 * torch.randn_like(X) # add noise
# 1. Define the model: a single linear layer
model = nn.Sequential(nn.Linear(1, 16), nn.ReLU(), nn.Linear(16, 1))
# 2. Choose a loss and an optimizer
loss_fn = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# 3. The four-beat training loop
for epoch in range(200):
optimizer.zero_grad() # beat 0: clear old gradients
y_pred = model(X) # beat 1: forward pass
loss = loss_fn(y_pred, y) # beat 2: measure error
loss.backward() # beat 3: backward pass (autograd)
optimizer.step() # beat 4: update the weights
if epoch % 50 == 0:
print(f"epoch {epoch:3d} loss {loss.item():.4f}")
print("Final loss:", round(loss.item(), 4))
Run it and watch the loss fall - the model is learning. This exact skeleton scales to convolutional nets, transformers, and beyond; only the model and data change.
The same model in TensorFlow/Keras is far more compact because Keras hides the loop:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(16, activation="relu", input_shape=(1,)),
tf.keras.layers.Dense(1),
])
model.compile(optimizer="adam", loss="mse")
# model.fit(X_np, y_np, epochs=200, verbose=0) # the loop is built in
PyTorch shows you the loop; Keras hides it. PyTorch is favored in research for that transparency; Keras shines for fast, standard models.
๐ Knowledge Check: The Training Loop¶
- Name the four beats of the training loop in order.
- Which beat would you remove to "freeze" the model's weights?
- Why does Keras
fit()feel shorter than the PyTorch loop?
๐ฎ Mastery Challenges¶
๐ข Novice Challenge: Tensor Gymnastics¶
Objective: Demonstrate fluency with tensor shapes and devices.
Requirements:
- [ ] Create a random (8, 3) tensor and reshape it to (4, 6)
- [ ] Move it to your best available device and print .device
- [ ] Compute its column means with tensor.mean(dim=0)
Validation: All three operations run without a device or shape error.
๐ก Intermediate Challenge: Train From Scratch¶
Objective: Fit the noisy y = 2x + 1 data using the four-beat loop.
Requirements:
- [ ] Build the nn.Sequential model above
- [ ] Train for 200 epochs and print the loss every 50
- [ ] Confirm the final loss is well below the starting loss
Validation: The printed loss decreases monotonically (roughly) and ends near the noise floor (~0.01).
๐ด Advanced Challenge: Save, Reload, and GPU¶
Objective: Persist a trained model and continue on a device.
Requirements:
- [ ] Save weights with torch.save(model.state_dict(), "model.pt")
- [ ] Build a fresh model and load_state_dict from the file
- [ ] Move the reloaded model to your device and verify it predicts identically
Validation: Predictions from the reloaded model match the original within floating-point tolerance.
๐ Quest Rewards & Achievements¶
๐๏ธ Badges Earned: - ๐ Tensor Smith - You built and trained a model in a real framework - โ๏ธ Autograd Adept - You command the forward/backward/step loop
๐ ๏ธ Skills Unlocked:
- PyTorch Model Building - The nn.Module + training-loop workflow
- Framework Selection - Choosing PyTorch vs TensorFlow deliberately
๐ Unlocked Quests: - Computer Vision Mastery - Apply CNNs to images - Natural Language Processing - Transformers and LLMs - MLOps Engineering - Take models to production
๐ Progression Points: +75 XP
๐บ๏ธ Next Steps in Your Journey¶
Continue the Main Story: - ๐ฏ Computer Vision Mastery - Convolutions and image models
Explore Side Adventures: - โ๏ธ Natural Language Processing - Transformers and LLMs - โ๏ธ MLOps Engineering - From notebook to production
Character Class Recommendations¶
๐ป Software Developer: Continue to Computer Vision Mastery ๐๏ธ System Engineer: Explore MLOps Engineering ๐ Data Scientist: Advance to Natural Language Processing
๐ Resources¶
Official Documentation¶
- PyTorch Documentation - The canonical reference
- PyTorch: Learn the Basics - Tensors to training loop
- TensorFlow Guide - Core concepts and Keras
Community Resources¶
- PyTorch Forums - Active Q&A community
- Stack Overflow: pytorch tag - Practical troubleshooting
- Keras Documentation - The high-level API in depth
Learning Materials¶
- Deep Learning with PyTorch (free book) - A thorough introduction
- Dive into Deep Learning (d2l.ai) - Interactive, framework-agnostic text
๐ค Quest Completion Checklist¶
- โ Completed all primary objectives
- โ Trained a model with a full PyTorch training loop
- โ Answered all knowledge check questions
- โ Completed at least one mastery challenge
- โ Explored the resource library
- โ Identified your next quest in the journey
๐ธ๏ธ Knowledge Graph¶
Structured wiki-links connect this quest to the IT-Journey knowledge graph. Open the Obsidian Graph View to explore connections.
Level hub: [[Level 1101 - Machine Learning & AI]] Overworld: [[๐ฐ Overworld - Master Quest Map]] Required: [[Neural Networks Deep Dive: Build CNNs, RNNs & Transformers from Scratch]] Unlocks: [[Computer Vision Mastery: Image Classification, Object Detection & Segmentation]] ยท [[Natural Language Processing: Text Analysis, Transformers & LLMs with Python]] ยท [[MLOps Engineering: CI/CD Pipelines for Machine Learning Production]] Obsidian docs: [[Obsidian Knowledge Graph and Wiki Links]]