Python Basics Recap¶
If you know Python, this is a quick refresher of the concepts you'll need for Machine Learning. If something looks new, take a moment to understand it.
Variables and Data Types¶
# Numbers
age = 25 # int
temperature = 98.6 # float
learning_rate = 0.01 # float (very common in ML!)
# Strings
name = "neural network"
# Booleans
is_training = True
converged = False
In ML, most values are float
Weights, biases, learning rates, loss values — almost everything in ML is a floating-point number.
Lists — Ordered Collections¶
# A list of numbers (like a dataset)
scores = [85, 92, 78, 95, 88]
# Access elements (0-indexed)
print(scores[0]) # 85 (first)
print(scores[-1]) # 88 (last)
# List length
print(len(scores)) # 5
# Slicing
print(scores[1:3]) # [92, 78]
# List comprehension (very common in ML code)
doubled = [x * 2 for x in scores]
print(doubled) # [170, 184, 156, 190, 176]
Dictionaries — Key-Value Pairs¶
# Model parameters
params = {
"learning_rate": 0.01,
"epochs": 100,
"batch_size": 32
}
# Access
print(params["learning_rate"]) # 0.01
# Update
params["epochs"] = 200
# Loop through
for key, value in params.items():
print(f"{key} = {value}")
Why dictionaries matter in ML
Model hyperparameters, configuration settings, and expression parameters are almost always stored as dictionaries.
Functions¶
# Basic function
def relu(x):
"""ReLU activation function."""
if x > 0:
return x
else:
return 0
print(relu(5)) # 5
print(relu(-3)) # 0
# Function with default parameters
def train(epochs=100, lr=0.01):
print(f"Training for {epochs} epochs with lr={lr}")
train() # Uses defaults
train(epochs=200, lr=0.001) # Custom values
Loops¶
# For loop — iterating over data
data = [1, 2, 3, 4, 5]
total = 0
for value in data:
total += value
print(f"Sum = {total}") # 15
# Range-based loop — for epochs
for epoch in range(5):
print(f"Epoch {epoch}")
# Epoch 0, 1, 2, 3, 4
# While loop — until convergence
loss = 10.0
while loss > 0.1:
loss = loss * 0.5 # Simulating loss decreasing
print(f"Loss: {loss:.2f}")
Classes and Objects¶
Understanding classes is essential because Neurogebra uses them everywhere.
class Neuron:
"""A simple neuron."""
def __init__(self, weight, bias):
self.weight = weight
self.bias = bias
def forward(self, x):
"""Compute output: weight * x + bias."""
return self.weight * x + self.bias
def __repr__(self):
return f"Neuron(w={self.weight}, b={self.bias})"
# Create a neuron
n = Neuron(weight=2.0, bias=1.0)
# Use it
print(n.forward(3)) # 2.0 * 3 + 1.0 = 7.0
print(n) # Neuron(w=2.0, b=1.0)
Neurogebra Example
In Neurogebra, Expression is a class. When you do relu = forge.get("relu"), you get an Expression object with methods like .eval(), .gradient(), and .explain().
Lambda Functions¶
Short, one-line functions used frequently in ML:
# Lambda: anonymous function
square = lambda x: x ** 2
print(square(4)) # 16
# Common in sorting and filtering
activations = ["relu", "sigmoid", "tanh", "gelu"]
sorted_acts = sorted(activations, key=lambda a: len(a))
print(sorted_acts) # ['relu', 'tanh', 'gelu', 'sigmoid']
Error Handling¶
try:
result = 10 / 0
except ZeroDivisionError:
print("Cannot divide by zero!")
# In ML context
try:
from neurogebra import MathForge
forge = MathForge()
expr = forge.get("nonexistent_function")
except KeyError as e:
print(f"Expression not found: {e}")
F-Strings (Formatted Strings)¶
Used constantly for printing training progress:
epoch = 42
loss = 0.0234
accuracy = 0.9567
print(f"Epoch {epoch}: Loss = {loss:.4f}, Accuracy = {accuracy:.2%}")
# Output: Epoch 42: Loss = 0.0234, Accuracy = 95.67%
The formatting codes:
| Code | Meaning | Example |
|---|---|---|
:.4f |
4 decimal places | 0.0234 |
:.2f |
2 decimal places | 0.02 |
:.2% |
Percentage | 95.67% |
:.2e |
Scientific notation | 2.34e-02 |
Importing Modules¶
# Import entire module
import numpy as np
# Import specific items
from neurogebra import MathForge, Expression
# Import with alias
from neurogebra.core.trainer import Trainer
Try It Yourself!¶
Exercise
# 1. Create a dictionary of hyperparameters
config = {"lr": 0.001, "epochs": 50, "optimizer": "adam"}
# 2. Write a function that simulates training
def fake_train(config):
for epoch in range(config["epochs"]):
loss = 1.0 / (epoch + 1)
if epoch % 10 == 0:
print(f"Epoch {epoch}: loss = {loss:.4f}")
fake_train(config)
Next: NumPy Essentials →