Introduction to Machine Learning and Deep
Learning: A Hands-On Starter’s Guide
Samuel Dodge and Lina Karam
Contents
Website iii
Preface iv
1 Python Basics, Unit Testing, and Image Processing 1
1.1 Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Setup Ubuntu Linux environment using VirtualBox . . . . . . . . . . . . . . . . . . . 1
1.3 Installing Python Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Python and NumPy fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.1 Task 1: Read Python Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.2 Task 2: Running code and Debugging in PyCharm . . . . . . . . . . . . . . . 6
1.4.3 Task 3: Introduction to Unit Testing in Python . . . . . . . . . . . . . . . . . 10
1.5 Application: An Image Container Class . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6 Submission Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2 Machine Learning Basics 21
2.1 Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Brief Machine Learning Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Least Squares and Model Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Implement K-Nearest Neighbors Model (KNN) . . . . . . . . . . . . . . . . . . . . . 24
2.5 Implement Logistic Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6 Implementing the Support Vector Machine . . . . . . . . . . . . . . . . . . . . . . . 31
2.7 Using Scikit-Learn Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.8 Submission Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3 A Neural Network from Scratch 36
3.1 Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2 Understanding Backpropagation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3 Implementing Layers of a Neural Network . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.1 Fully Connected Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3.2 ReLu Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.3 SoftMax Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.4 Cross Entropy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.4 Putting it all together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.4.1 Implement the Sequential model . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.4.2 Training the model with CIFAR100 data . . . . . . . . . . . . . . . . . . . . 45
3.5 Submission Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
i
CONTENTS
4 A Convolutional Neural Network from Scratch 49
4.1 Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2 Convolutional Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2.1 Data and Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.2.2 Forward pass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2.3 Backwards Pass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2.4 Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.2.5 Update parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3 Max Pooling Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.4 Flatten Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.5 Putting it all together again . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.6 Submission Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5 Transfer Learning and Computer Vision in PyTorch 59
5.1 PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.1.2 Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2 CIFAR100 Example in PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3 Transfer Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3.1 Datasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.2 Base Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.3 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.4 Feature Extractor + SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.5 Fine-tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6 Natural Language Processing with Recurrent Neural Networks in Tensorflow 70
6.1 Tensorflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.2 CIFAR100 in Tensorflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.3 RNN Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.3.1 RNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.3.2 LSTM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.3.3 GRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.4 RNNs for sentence classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.4.1 Datasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.4.2 Network Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
ii
Website
www.deeplearningtextbook.org
iii