
Explore the fundamentals of neural networks by building one from scratch in Python with NumPy and pandas, without TensorFlow, using Google Colab for datasets, code snippets, and challenges.
Train a neural network to identify handwritten digits using the MNIST dataset, a 70,000 grayscale 28 by 28 image set with 50k training and 20k test samples.
Learn the perceptron, a simple linear binary classifier using weights and an offset to separate classes with a line; explore a two-feature dataset, linear separability, and a guess-and-check training approach.
Implement a simple perceptron learning algorithm with augmented vectors to remove bias, update weights from misclassified samples, and examine convergence and linear separability tests using linear programming.
Explore the pocket algorithm for perceptron learning, tracking the best weight vector across iterations to handle nearly linearly separable data, and discuss extending to multiclass classification.
Turn a binary perceptron into a multiclass classifier using one-versus-rest or one-versus-one, with per-class weight vectors, computing signed distances to hyperplanes to select the class with the strongest margin.
Explore how a perceptron classifies zeros versus non-zeros in 784-dimensional image space and how a multilayer perceptron overcomes the x or problem to form a neural network.
Design and implement a neural network to classify 5000 greyscale images into three classes—checkerboard, bright line, and triangle—using a 4000/1000 train-test split, with data on a public GitHub repo.
design and implement a small neural network to classify checkerboard images, using an input layer, one hidden layer, and an output node, with random weights and a forward pass.
Learn how gradient descent optimizes neural networks by updating weights via backward and forward passes, using logistic activation and differentiable log loss to minimize error.
Build a multiclass neural network with one output node per class and softmax activation. Apply cross-entropy loss and gradient-based training to learn accurate predictions.
Learn how deep neural networks with multiple hidden layers use backpropagation to compute gradients for W1, W2, and W3, achieving about 94 percent accuracy on simple images.
Wanna understand deep learning and neural networks so well, you could code them from scratch? In this course, we'll do exactly that.
The course starts by motivating and explaining perceptrons, and then gradually works its way toward deriving and coding a multiclass neural network with stochastic gradient descent that can recognize hand-written digits from the famous MNIST dataset.
Course Goals
This course is all about understanding the fundamentals of neural networks. So, it does not discuss TensorFlow, PyTorch, or any other neural network libraries. However, by the end of this course, you should understand neural networks so well that learning TensorFlow and PyTorch should be a breeze!
Challenges
In this course, I present a number of coding challenges inside the video lectures. The general approach is, we'll discuss an idea and the theory behind it, and then you're challenged to implement the idea / algorithm in Python. I'll discuss my solution to every challenge, and my code is readily available on github.
Prerequisites
In this course, we'll be using Python, NumPy, Pandas, and good bit of calculus. ..but don't let the math scare you. I explain everything in great detail with examples and visuals.
If you're rusty on your NumPy or Pandas, check out my free courses Python NumPy For Your Grandma and Python Pandas For Your Grandpa.