Skip to content
A series of Jupyter notebooks that walk you through the fundamentals of Machine Learning and Deep Learning in Python using Scikit-Learn, Keras and TensorFlow 2.
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
datasets Update Jan 17, 2018
docker Merge pull request #317 from CezCz/fix-jupyter Dec 2, 2018
images Add the images/nlp directory Apr 23, 2019
work_in_progress Add warning about TF issue regarding DenseFeatures and the Functional… May 15, 2019
.gitignore Add .bak.* and datasets/titanic to .gitignore Apr 16, 2019
01_the_machine_learning_landscape.ipynb Create image directory and check for sklearn >= 0.20 Jan 21, 2019
02_end_to_end_machine_learning_project.ipynb Add index=housing.index when wrapping array in a DataFrame, fixes #426 May 12, 2019
03_classification.ipynb Add chapter 15, time series and NLP using RNNs, CNNs and Attention Apr 16, 2019
04_training_linear_models.ipynb Clarify figure 4-19 May 9, 2019
05_support_vector_machines.ipynb Crop long outputs so they show up nicer on Apr 15, 2019
06_decision_trees.ipynb Create image directory and check for sklearn >= 0.20 and TensorFlow >… Jan 21, 2019
07_ensemble_learning_and_random_forests.ipynb Crop long outputs so they show up nicer on Apr 15, 2019
08_dimensionality_reduction.ipynb Rename figure May 6, 2019
09_unsupervised_learning.ipynb Rename the figure paths from *_diagram.png to *_plot.png May 9, 2019
10_neural_nets_with_keras.ipynb Rename the figure paths from *_diagram.png to *_plot.png May 9, 2019
11_training_deep_neural_networks.ipynb Do not use learning_phase anymore, just set training=True/False May 9, 2019
12_custom_models_and_training_with_tensorflow.ipynb Stop using learning_phase: it's a global variable, and currently brok… May 9, 2019
13_loading_and_preprocessing_data.ipynb Add warning about TF issue regarding DenseFeatures and the Functional… May 15, 2019
14_deep_computer_vision_with_cnns.ipynb Fix typo in figure name May 6, 2019
15_processing_sequences_using_rnns_and_cnns.ipynb Rename chapters 11 to 15 and split chapter 15 into 15 and 16 Apr 16, 2019
16_nlp_with_rnns_and_attention.ipynb Fix the transformer (use final encoder outputs) May 10, 2019
17_autoencoders_and_gans.ipynb Change notebook title to Autoencoders and GANs May 6, 2019
18_reinforcement_learning.ipynb Add warning about TF issue regarding DenseFeatures and the Functional… May 15, 2019 Simplify, add links to binder, deepnotes and colab, and mov… Jan 22, 2019
LICENSE First notebook added: matplotlib Feb 16, 2016 Add additional instructions for hosted services Jan 24, 2019
book_equations.ipynb Fix equation 16-6 (max_alpha'=>max_a') May 7, 2018
extra_gradient_descent_comparison.ipynb Add intro paragraph, tx to Daniel and minor formatting fixes Sep 17, 2018
index.ipynb Add more chapters to index.ipynb Apr 30, 2019
math_linear_algebra.ipynb Right angle is pi/2, not pi/4. One reason why tau > pi ;) Oct 27, 2017
requirements.txt Use separate joblib package rather than the one in sklearn (which is … Apr 26, 2019
tools_matplotlib.ipynb fixed typo in tools_matplotlib.ipynb Mar 4, 2016
tools_numpy.ipynb Fix small typo in numpy notebook Mar 24, 2018
tools_pandas.ipynb Upgrade to latest pandas version, update resampling API Jan 5, 2018

Machine Learning Notebooks

This project aims at teaching you the fundamentals of Machine Learning in python. It contains the example code and solutions to the exercises in the second edition of my O'Reilly book Hands-on Machine Learning with Scikit-Learn, Keras and TensorFlow:

Note: If you are looking for the first edition notebooks, check out ageron/handson-ml.

Quick Start

Want to play with these notebooks without having to install anything?

Use any of the following services.

WARNING: Please be aware that these services provide temporary environments: anything you do will be deleted after a while, so make sure you save anything you care about.

  • Open this repository in Binder:

    • Note: Most of the time, Binder starts up quickly and works great, but when handson-ml2 is updated, Binder creates a new environment from scratch, and this can take quite some time.
  • Or open it in Deepnote:

    • Note: Deepnote environments start up quickly, but they do not contain the latest Scikit-Learn and TensorFlow libraries, so you will need to run !python3 -m pip install -U -r requirements.txt before you import any library (or you must restart the runtime).
  • Or open it in Colaboratory:

    • Note: Colab environments only contain the notebooks you open, they do not clone the rest of the project, so you need to do it yourself by running !git clone and !mv handson-ml2/* /content to have access to other files in this project (such as datasets and images). Moreover, Colab does not come with the latest libraries, so you need to run !python3 -m pip install -U -r requirements.txt then restart the environment (but do not reset it!). If you open multiple notebooks from this project, you only need to do this once (as long as you do not reset the runtimes).

Just want to quickly look at some notebooks, without executing any code?

Browse this repository using's notebook viewer:

Note:'s notebook viewer also works but it is slower and the math equations are not always displayed correctly.

Want to install this project on your own machine?

If you have a working Python 3.5+ environment and git is installed, then an easy way to install this project and its dependencies is using pip. Open a terminal and run the following commands (do not type the $ signs, they just indicate that this is a terminal command):

$ git clone
$ cd handson-ml2
$ python3 -m pip install --user --upgrade pip setuptools
$ # Read `requirements.txt` if you want to use a GPU.
$ python3 -m pip install --user --upgrade -r requirements.txt
$ jupyter notebook

If you need more detailed installation instructions, or you want to use Anaconda, read the detailed installation instructions.


I would like to thank everyone who contributed to this project, either by providing useful feedback, filing issues or submitting Pull Requests. Special thanks go to Haesun Park who helped on some of the exercise solutions, and to Steven Bunkley and Ziembla who created the docker directory.

You can’t perform that action at this time.