Three eras, one library
Keras has gone through three distinct eras — and which one a tutorial was written in tells you instantly how much to trust it.
Era 1: Standalone Library (2015–2017) — Keras started as an independent library that could run on top of Theano, TensorFlow, or CNTK. This multi-backend design was Keras's original superpower, letting researchers switch engines without changing code.
Era 2: TensorFlow Integration (2017–2023) — Keras was integrated into TensorFlow as tf.keras, becoming TF's official high-level API. This brought massive adoption but created tight coupling. Keras became synonymous with TensorFlow in many developers' minds, and running Keras on PyTorch or JAX wasn't possible.
Era 3: Keras 3 Multi-Backend Rewrite (2023–present) — Chollet and the team performed a complete rewrite, restoring the original multi-backend vision but at a much deeper level. Keras 3 runs on TensorFlow, PyTorch, JAX, and OpenVINO. The split back to standalone was necessary because TensorFlow coupling limited Keras's reach — researchers using PyTorch or JAX were locked out.
The practical upshot: a tutorial's vintage is written in its imports. tf.keras... everywhere is Era-2 thinking; a bare import keras with a deliberate backend choice (the Code block below) is someone living in Era 3.