Open-source project
jeffheaton/t81_558_deep_learning avatar
jeffheaton/t81_558_deep_learning

jeffheaton/t81_558_deep_learning: The Keras Course Textbook That Was Replaced

T81-558: Keras - Applications of Deep Neural Networks @Washington University in St. Louis

5,734 stars2,958 forksJupyter NotebookNOASSERTION

At a glance

What is it?
This repository is the Keras and TensorFlow edition of Jeff Heaton's Washington University deep learning course, now superseded at the university by a PyTorch version. It is a self-contained curriculum of Jupyter notebooks, not a library, and its value depends on whether you want to learn Keras or already run it.
Who is it for?
Adopt it if you want a structured Keras and TensorFlow curriculum with runnable notebooks, or if you are maintaining teaching material for that stack. Do not adopt it if you need the current university course, which the README states is now the PyTorch version at jeffheaton/app_deep_learning, or if you need a supported library with a release cadence and a clear licence.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 144 days ago.
What is it written in?
Mainly Jupyter Notebook, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

A course textbook stored as notebooks, not a package you install

The README describes the repository as the complete text for the course, and the same material is also sold in book form under the title Applications of Deep Neural networks with Keras, ISBN 9798416344269. There is nothing to import. You clone the repository, open a notebook, and work through it. The objectives listed in the README are pedagogical: explain how neural networks compare to other machine learning models, determine when a deep neural network is a good choice for a particular problem, and demonstrate understanding through a final project uploaded to GitHub. That framing matters if you arrived expecting a library. The unit of reuse here is a lesson, not an API. The audience is a student who knows at least one programming language, since the README states Python knowledge is not required beforehand, and an engineer who wants the same progression without enrolling. The syllabus table maps every module to a notebook file such as t81_558_class_01_1_overview.ipynb, and each module lists its parts. Module 3, for instance, runs from a neural network introduction through saving and loading a Keras model, early stopping, and extracting weights for manual calculation. That ordering is the product.

The notebook sequence is the architecture

There is no runtime, no service, and no data flow to trace between components. The structure is the syllabus. Modules 1 and 2 cover Python, Pandas, categorical encoding, grouping and shuffling, and feature engineering, so that later notebooks can assume a working dataframe. Module 3 introduces TensorFlow and Keras, then saving and loading a model, early stopping to prevent overfitting, and extracting Keras weights so a student can reproduce the forward pass by hand. Module 4 moves to tabular data: feature vector encoding, multiclass classification with ROC and AUC, regression with RMSE, backpropagation with Nesterov momentum and ADAM, and error calculation from scratch. Module 5 handles regularization with ridge and lasso, K-fold cross validation, L1 and L2 penalties, dropout, and bootstrapping for hyperparameters. Module 6 turns to vision with image processing, convolutional networks, pretrained networks, generators and image augmentation, and YOLOv5 for multiple-image recognition. Module 7 covers generative adversarial networks, including training StyleGAN3 on your own images, exploring the StyleGAN latent vector, and Deoldify for old photographs. Each notebook stands alone, so a reader can enter at Module 6 without finishing Module 5, but the dependencies run in one direction: the pandas work in Module 2 is assumed by the encoding work in Module 4.

Running the notebooks and the version question

The README gives no install command, no requirements file, and no environment specification. That is a real gap for anyone outside the classroom. What it does give is the notebook names, so the practical path is to clone the repository, create a Python environment, install TensorFlow and Keras at a version compatible with the notebooks, and open the files with Jupyter. The course description states that students implement deep learning using Google TensorFlow and Keras, and that high performance computing aspects demonstrate running on GPUs and grids, so a GPU is useful for the convolutional and GAN modules but not required for the tabular ones. The repository is tagged with keras, tensorflow, convolutional-neural-networks, gan, machine-learning and neural-network. Because the last release is tagged 2023-spring and dates to 2023-05-29, the notebooks reflect the TensorFlow and Keras APIs of that period. Keras 3 changed backend handling and parts of the model API, so a fresh pip install of the current TensorFlow may not match what the notebooks call. Pin your versions, or expect to fix import and API errors in the later modules. The README does not state which versions were used, so you will be determining that empirically from the notebook contents.

The PyTorch replacement is the first thing to read

The README opens with an important note: current students of this course at Washington University should refer to the PyTorch version of the course at jeffheaton/app_deep_learning, which is what is currently offered at the university, and this repository contains the previous Keras and TensorFlow version. That sentence should decide the question for most readers. If you are taking the course, or want the material the university actually teaches, this is the wrong repository. The two differ in framework, not in scope: the same instructor covers the same ground in PyTorch. If you are learning Keras specifically, or you maintain Keras code and want a curriculum that matches it, the older edition is the one you want, and the PyTorch edition is the wrong tool for you. Neither is a drop-in substitute for the other, because the model definitions, training loops and debugging habits differ between the frameworks. Treat the two repositories as parallel editions of one textbook rather than as a current and a deprecated version of a library.

Licence status is unstated and should be checked first

The repository metadata reports the licence as NOASSERTION, which means no licence was detected or asserted by the hosting platform. The README describes the material as a textbook with an ISBN and provides a BibTeX citation for academic use, which suggests the author expects attribution, but neither the README nor the metadata states terms for reuse, modification or redistribution. For a reader working through the notebooks privately, this changes nothing. For anyone planning to reuse the notebooks in a course, republish them, or build commercial training material on top of them, the absence of an asserted licence is the first thing to resolve, by contacting the author or checking the book page linked from the README. This is not legal advice, and the practical point is narrow: do not assume the repository is freely reusable in the way a permissively licensed library is, because nothing in the supplied material says so.

Maintenance cost and what the release tags tell you

The release history shows three semester tags: 2022-spring, 2022-fall and 2023-spring, with the most recent dated 2023-05-29. The repository is not archived and the last push is later than the last release, so the code is not frozen, but the tagged snapshots are semester artifacts rather than software versions. The README states plainly that the content of this course changes as technology evolves. That is a maintenance statement about the course, not a support commitment to you. If you fork this for your own teaching, you inherit the version drift described above: TensorFlow and Keras move, the notebooks do not, and the gap widens with each framework release. Budget for that. A fork that pins its dependencies in a requirements file will age better than one that tracks the notebooks as they are, because nothing in the repository currently records the environment the notebooks were written against.

Where it fits against a library like Keras itself

The obvious alternative is not another course but the Keras documentation and examples, which are maintained alongside the framework and updated when the API changes. The difference in approach is the direction of the material. Keras documentation is organized by API surface: here is a layer, here is a loss, here is how to save a model. This repository is organized by problem progression: here is tabular data and its error metrics, then regularization, then images, then generation, with each concept introduced when a task needs it. That makes the notebooks better for building a mental sequence and worse for looking up a specific function, because you have to know which module covers it. For a reader who already knows the framework and needs a reference, the documentation wins. For a reader who needs the sequence, the notebooks win, and the fact that they are pinned to an older API is a cost rather than a disqualification, provided you are willing to fix what breaks.

Editorial conclusion

Adopt it if you want a structured Keras and TensorFlow curriculum with runnable notebooks, or if you are maintaining teaching material for that stack. Do not adopt it if you need the current university course, which the README states is now the PyTorch version at jeffheaton/app_deep_learning, or if you need a supported library with a release cadence and a clear licence. Before committing, verify the licence status the repository does not assert, and open t81_558_class_03_1_neural_net.ipynb to confirm the TensorFlow and Keras versions it pins still resolve in your environment.

Official sources

  1. Issues
  2. jeffheaton/t81_558_deep_learning on GitHub
  3. Project website
  4. README
  5. Releases
Community notes

Community notes