# Machine learning terms/TensorFlow

> Source: https://aiwiki.ai/wiki/machine_learning_terms_tensorflow
> Updated: 2026-05-09
> Categories: Deep Learning, Machine Learning
> From AI Wiki (https://aiwiki.ai), a free encyclopedia of artificial intelligence. Quote with attribution.

*See also: [Machine learning terms](/wiki/machine_learning_terms)*

**[TensorFlow](/wiki/tensorflow)** is an open-source software library for [machine learning](/wiki/machine_learning), [deep learning](/wiki/deep_learning), and numerical computation, developed and maintained by [Google](/wiki/google). It provides end-to-end tools for building, training, deploying, and serving [neural networks](/wiki/neural_network), running on [CPUs](/wiki/cpu), [GPUs](/wiki/gpu), and Google's purpose-built [Tensor Processing Units](/wiki/tensor_processing_unit_tpu) (TPUs). TensorFlow is licensed under the Apache 2.0 license and is one of the most widely cited frameworks in the history of [artificial intelligence](/wiki/artificial_intelligence).

This page is the gateway hub for TensorFlow-related entries on the AI Wiki. It introduces the core ideas, surveys the major APIs and surrounding ecosystem, compares TensorFlow with [PyTorch](/wiki/pytorch) and [JAX](/wiki/jax), and provides a curated index of every TensorFlow concept and tool with its own dedicated wiki page.

## brief history of tensorflow

TensorFlow grew out of an internal Google system called DistBelief, built around 2011 inside [Google Brain](/wiki/google_brain) to train large neural networks across many machines. DistBelief powered early Google products such as Inception (the image classifier behind Google Photos search) and the deep learning components of Google's speech recognition systems. Engineers including Jeff Dean, Rajat Monga, and others rewrote DistBelief into a more flexible and portable system, which Google open-sourced under the Apache 2.0 license on November 9, 2015.

The table below summarizes the major release lines.

| Version line | First release | Key change |
|---|---|---|
| TensorFlow 0.x | November 2015 | Initial open-source release. Static dataflow [graphs](/wiki/graph) defined in Python and run by a C++ runtime |
| TensorFlow 1.0 | February 2017 | First stable API. Introduced `tf.estimator`, broader Windows support, XLA experimental |
| TensorFlow 1.4 | November 2017 | [Keras](/wiki/keras) folded in as `tf.keras`. [Dataset API](/wiki/dataset_api_tf_data) (`tf.data`) added |
| TensorFlow 1.5 | January 2018 | [Eager execution](/wiki/eager_execution) available as opt-in mode |
| TensorFlow 2.0 | September 2019 | [Eager execution](/wiki/eager_execution) on by default. `tf.function` and AutoGraph for tracing. [Keras](/wiki/keras) became the official high-level API. Many `tf.contrib` modules removed |
| TensorFlow 2.x ongoing | 2020 to present | Steady additions: Keras 3, MLIR-based compiler stack, expanded [TPU](/wiki/tpu) support, deeper [JAX](/wiki/jax) interoperability |

The transition from TensorFlow 1.x to 2.0 was the single largest break in the project's history. TensorFlow 1.x required users to first build a static computation [graph](/wiki/graph), then execute it inside a `tf.Session`. TensorFlow 2.0 made [eager execution](/wiki/eager_execution) the default, so code runs imperatively like ordinary Python and NumPy, and a separate `tf.function` decorator compiles hot paths into a [graph](/wiki/graph) for speed. This brought the developer experience much closer to [PyTorch](/wiki/pytorch).

## design philosophy and core abstractions

The central data structure in TensorFlow is the [tensor](/wiki/tensor), a multidimensional array of a single numeric or string type. A tensor has a [rank](/wiki/rank_tensor) (the number of dimensions), a [shape](/wiki/tensor_shape) (the size of each dimension), and a [size](/wiki/tensor_size) (the total number of elements). All TensorFlow computations are expressed as operations on tensors.

The original TensorFlow programming model is based on a directed [graph](/wiki/graph) in which each [node](/wiki/node_tensorflow_graph) represents an [operation](/wiki/operation_op) ("op") and each edge carries a [tensor](/wiki/tensor) from one operation's output to another's input. The runtime can then schedule the graph across multiple [devices](/wiki/device), perform [automatic differentiation](/wiki/automatic_differentiation) by traversing the graph backwards, and apply optimizations such as constant folding and operator fusion.

Key ideas inherited from this model and still present today include:

- **Tensors as the universal value type**, including dense, sparse, ragged, and string tensors.
- **Operations as nodes**, ranging from low-level math (matmul, conv2d) to high-level layers and optimizers.
- **[Graph execution](/wiki/graph_execution)** for performance, alongside [eager execution](/wiki/eager_execution) for ease of use.
- **Automatic differentiation** through `tf.GradientTape`, enabling training by [gradient descent](/wiki/gradient_descent) and [backpropagation](/wiki/backpropagation).
- **Device placement**, where ops can be pinned to a specific [CPU](/wiki/cpu), [GPU](/wiki/gpu), or [TPU](/wiki/tpu).
- **Portability**, with the same model definition able to run in Python for training, in C++ in production, in browsers via [TensorFlow.js](/wiki/tensorflow_js), and on phones via [TensorFlow Lite](/wiki/tensorflow_lite).

## core APIs

TensorFlow exposes a layered set of APIs. Most users today work primarily through Keras, with the lower layers reached only when needed.

### tf.keras

[Keras](/wiki/keras), originally an independent library by Francois Chollet released in 2015, became the recommended high-level API of TensorFlow in 2017 and the official one in TensorFlow 2.0. Through [tf.keras](/wiki/tf_keras), users can define models with three styles:

- The **Sequential** API, a linear stack of layers.
- The **Functional** API, which expresses arbitrary directed acyclic graphs of layers.
- **Model subclassing**, where developers extend `tf.keras.Model` and write `call()` in pure Python.

Keras provides built-in layers, losses, metrics, optimizers, and a `model.fit` training loop, and serializes models to [SavedModel](/wiki/savedmodel) or the Keras `.keras` format. Keras 3, released in late 2023, is a multi-backend rewrite that runs the same model on TensorFlow, [PyTorch](/wiki/pytorch), or [JAX](/wiki/jax).

### tf.data

The [Dataset API](/wiki/dataset_api_tf_data) (`tf.data`) provides a high-performance input pipeline for [feature engineering](/wiki/feature_engineering) and data loading. It composes operations like `map`, `batch`, `shuffle`, `cache`, and `prefetch` into a streaming pipeline that overlaps I/O with model computation. Common sources include in-memory tensors, files in the [tf.Example](/wiki/tf_example) (TFRecord) format, CSVs, and TensorFlow Datasets (`tfds`).

### tf.function and graph compilation

In TensorFlow 2.x, applying `@tf.function` to a Python function traces the function once and produces a static [graph](/wiki/graph) that can be reused. AutoGraph automatically converts Python control flow (`if`, `while`, `for`) into graph ops. The traced graph is then compiled and optimized through the [XLA](/wiki/xla) (Accelerated Linear Algebra) compiler when `jit_compile=True`.

### tf.distribute

The `tf.distribute` API encapsulates strategies for parallel training across multiple devices and machines. Common strategies include:

| Strategy | Use case |
|---|---|
| `MirroredStrategy` | Synchronous training on multiple GPUs in one machine |
| `MultiWorkerMirroredStrategy` | Synchronous training across many machines |
| `TPUStrategy` | Training on a [TPU](/wiki/tpu), [TPU Pod](/wiki/tpu_pod), or [TPU slice](/wiki/tpu_slice) |
| `ParameterServerStrategy` | Asynchronous training with [parameter servers](/wiki/parameter_server_ps) |
| `CentralStorageStrategy` | Variables on CPU, computation on GPU |

### estimator (deprecated)

The [Estimator](/wiki/estimator) API was the recommended high-level API in TensorFlow 1.x. It encapsulated training, evaluation, prediction, and serving behind a single `Estimator` class, and was widely used at Google for production pipelines. With the rise of `tf.keras` in TensorFlow 2.x the Estimator API was placed in maintenance mode; new development is steered toward Keras, and Estimator support is being phased out of the core distribution.

### lower-level APIs

Underneath Keras, TensorFlow exposes lower-level building blocks. The [Layers API](/wiki/layers_api_tf_layers) (`tf.layers`) was the canonical low-level layer API in TensorFlow 1.x and has been superseded by `tf.keras.layers`. `tf.Module`, `tf.Variable`, and `tf.GradientTape` form the minimum surface needed to write custom training loops. [Queues](/wiki/queue), [Savers](/wiki/saver), and [summary](/wiki/summary) ops are 1.x-era constructs that have been replaced by `tf.data`, the [SavedModel](/wiki/savedmodel) format, and `tf.summary` writers respectively.

## hardware support

A defining feature of TensorFlow is its hardware reach. The runtime can dispatch the same model to several classes of accelerator.

| Hardware | Notes |
|---|---|
| [CPU](/wiki/cpu) | Default backend. Uses Eigen and oneDNN (formerly MKL-DNN) for vectorized math |
| [GPU](/wiki/gpu) | NVIDIA GPUs via CUDA and cuDNN. AMD GPUs via ROCm |
| [TPU](/wiki/tpu) | Google's [Tensor Processing Unit](/wiki/tensor_processing_unit_tpu), available on [Cloud TPU](/wiki/cloud_tpu). A single [TPU chip](/wiki/tpu_chip) hosts multiple cores; many chips form a [TPU Pod](/wiki/tpu_pod) interconnected by a high-bandwidth fabric |
| Mobile and edge | Phones, microcontrollers, and embedded boards through [TensorFlow Lite](/wiki/tensorflow_lite) |
| Web browsers | WebGL and WebGPU through [TensorFlow.js](/wiki/tensorflow_js) |

A [TPU](/wiki/tpu) has its own scheduling concepts. A [TPU node](/wiki/tpu_node) is a logical compute target that the user job talks to. The [TPU master](/wiki/tpu_master) coordinates [TPU workers](/wiki/tpu_worker), each of which owns a [TPU device](/wiki/tpu_device) or several. Programs run on a [TPU resource](/wiki/tpu_resource) of a particular [TPU type](/wiki/tpu_type), and large jobs request a [TPU slice](/wiki/tpu_slice) carved out of a [TPU Pod](/wiki/tpu_pod).

## the broader tensorflow ecosystem

TensorFlow ships with or is closely accompanied by a family of supporting libraries.

### tensorboard

TensorBoard is the visualization toolkit for TensorFlow. It reads event files written during training and displays scalar curves (loss, [metric](/wiki/metric) values), histograms, images, embeddings projected into 3D, computation graphs, and profiler traces. Although developed for TensorFlow, TensorBoard can also be used with [PyTorch](/wiki/pytorch) via `torch.utils.tensorboard`.

### tensorflow lite

[TensorFlow Lite](/wiki/tensorflow_lite) is the on-device runtime. It converts a [SavedModel](/wiki/savedmodel) or Keras model into a compact `.tflite` flatbuffer optimized for mobile (Android, iOS), embedded Linux, and microcontrollers (TFLite for Microcontrollers). It supports quantization to int8 and float16 and hardware delegates such as the Android NNAPI, the Apple Core ML delegate, and Qualcomm Hexagon. In 2024 Google began rebranding parts of TensorFlow Lite as "LiteRT" while keeping API compatibility.

### tensorflow extended (TFX)

TFX is the production machine learning platform layered on top of TensorFlow. It provides standard pipeline components for data ingestion, validation, preprocessing, training, evaluation, model analysis, pushing models to serving, and model card generation, orchestrated by Apache Airflow, Kubeflow Pipelines, or Apache Beam. TFX is widely used inside Google for production model lifecycles.

### tensorflow serving

[TensorFlow Serving](/wiki/tensorflow_serving) is a high-performance C++ server for hosting trained models in production. It loads [SavedModels](/wiki/savedmodel), exposes them over gRPC and REST, and supports model versioning, hot reload, and batching. Serving is a key part of the path from research to deployment.

### tensorflow.js

[TensorFlow.js](/wiki/tensorflow_js) is a JavaScript library for running and training models in browsers and in Node.js. It can import a [SavedModel](/wiki/savedmodel) or Keras model, execute it on the GPU through WebGL or WebGPU, and even fine-tune small models in the user's browser tab.

### tensorflow datasets and tensorflow hub

TensorFlow Datasets (TFDS) is a library of ready-to-use public datasets exposed as `tf.data.Dataset` objects, including MNIST, ImageNet, Common Crawl-derived corpora, and many more. TensorFlow Hub is a repository of pre-trained model checkpoints (image, text, audio) that can be downloaded and fine-tuned with one line of code. Many of its assets have since migrated to Kaggle Models.

### tensorflow playground

[TensorFlow Playground](/wiki/tensorflow_playground) is an interactive in-browser visualization that lets users train small neural networks on toy 2D datasets and watch features form in real time. It is widely used for teaching introductory deep learning.

### specialized libraries

TensorFlow has spawned a long tail of focused libraries:

- TensorFlow Probability for probabilistic modeling and Bayesian methods.
- TensorFlow Federated for federated learning.
- TensorFlow Quantum for hybrid classical-quantum models.
- TensorFlow Recommenders for recommender systems.
- TensorFlow Graphics for differentiable rendering.
- TensorFlow Agents for reinforcement learning.
- TensorFlow Decision Forests for tree-based models.
- TensorFlow Text and KerasNLP / KerasHub for natural language processing.

## file formats and serialization

| Format | Purpose |
|---|---|
| [SavedModel](/wiki/savedmodel) | Canonical export format. Bundles graph definitions, variable values, and a serving signature into a directory that any TensorFlow runtime can load |
| `.keras` | Keras 3 unified single-file format |
| HDF5 (`.h5`) | Legacy Keras model format |
| Checkpoint (`.ckpt`) | Variable values written by `tf.train.Checkpoint` for training resume |
| TFRecord | Container of serialized [tf.Example](/wiki/tf_example) protos for efficient streaming input |
| `.tflite` | FlatBuffer used by [TensorFlow Lite](/wiki/tensorflow_lite) |
| TensorFlow.js model JSON + binary shards | Used by [TensorFlow.js](/wiki/tensorflow_js) |

The project's directory layout typically places SavedModels under a [root directory](/wiki/root_directory) per model, with versioned subdirectories that [TensorFlow Serving](/wiki/tensorflow_serving) can hot swap.

## major projects built with tensorflow

TensorFlow has been the implementation framework for many landmark Google models and open-source projects, including:

- The original [Transformer](/wiki/transformer) and the paper ["Attention Is All You Need"](/wiki/attention_is_all_you_need_transformer) (2017).
- BERT (2018), the bidirectional encoder that briefly defined the state of the art in [NLP](/wiki/natural_language_processing).
- T5 (2019) and the "text-to-text" framing of language tasks.
- AlphaFold 2 (2020) for protein structure prediction, originally trained in TensorFlow before later DeepMind work moved to JAX.
- The early generations of Google's dialogue and language models such as [LaMDA](/wiki/lamda) and [PaLM](/wiki/palm).
- TensorFlow object detection, MoveNet, MediaPipe, and many production Google features in Search, Gmail, Translate, Maps, and Photos.

More recent Google frontier models such as [Gemini](/wiki/gemini) and [Gemma](/wiki/gemma) are primarily implemented in [JAX](/wiki/jax) on top of Flax.

## tensorflow vs pytorch vs jax

TensorFlow's main competitors are [PyTorch](/wiki/pytorch), released by Meta AI Research in 2016, and [JAX](/wiki/jax), released by Google Research in 2018. The three frameworks make different trade-offs.

| Aspect | TensorFlow | PyTorch | JAX |
|---|---|---|---|
| Primary maintainer | [Google](/wiki/google) | Meta and the PyTorch Foundation (under the Linux Foundation since 2022) | [Google](/wiki/google) |
| First public release | November 2015 | September 2016 | December 2018 |
| Default execution mode | Eager since TF 2.0, optional `tf.function` graphs | Eager, with `torch.compile` graphs since 2.0 | Functional, traced with `jit` |
| Style | Object-oriented Keras and tf.Module | Object-oriented `nn.Module` | Functional, NumPy-like |
| High-level API | [Keras](/wiki/keras) (`tf.keras`) | torch.nn, Lightning, fastai | Flax, Haiku, Equinox |
| Compiler | XLA, MLIR | TorchInductor, XLA via PyTorch/XLA | XLA |
| Mobile / on-device | [TensorFlow Lite](/wiki/tensorflow_lite), TF.js | PyTorch Mobile, ExecuTorch | Indirect (export to TFLite) |
| Production serving | [TensorFlow Serving](/wiki/tensorflow_serving), TFX | TorchServe, third-party | Custom |
| Strongest community | Industry, Google internal | Research, open-source LLMs | Research, large-scale Google models |

For several years TensorFlow had the larger overall user base, especially in industry. From around 2019 onward, [PyTorch](/wiki/pytorch) overtook TensorFlow in the academic research community. Public analyses such as Horace He's "State of Machine Learning Frameworks" (2019) showed PyTorch share of papers at top conferences (NeurIPS, ICML, ICLR, ACL, EMNLP, CVPR) crossing TensorFlow in 2018 to 2019, and the gap widening through 2020 and 2021. Industry use has gradually followed; most open-weights [large language models](/wiki/large_language_model) released since 2022, including the LLaMA, Mistral, and Qwen families, ship with PyTorch reference implementations.

Google itself increasingly favors [JAX](/wiki/jax) for new frontier research, while TensorFlow remains the production workhorse for many existing Google services and a major framework for on-device and embedded inference through [TensorFlow Lite](/wiki/tensorflow_lite).

## adoption trajectory

Key inflection points in TensorFlow's adoption:

| Year | Event |
|---|---|
| 2015 | Open-source release. TensorFlow becomes the most-starred ML repo on GitHub within a year |
| 2016 to 2018 | Dominant framework in industry deep learning. Used by [DeepMind](/wiki/deepmind), Google, Airbnb, Twitter, Uber, and many others |
| 2018 | [PyTorch](/wiki/pytorch) 1.0 stabilizes; eager execution by default attracts researchers |
| 2019 | TensorFlow 2.0 ships with eager execution and tighter Keras integration |
| 2019 to 2020 | PyTorch overtakes TensorFlow in shares of papers at top ML conferences |
| 2020 to 2022 | Hugging Face Transformers, originally TensorFlow plus PyTorch, sees PyTorch checkpoints become the default |
| 2022 to 2024 | Google increasingly publishes flagship models (PaLM 2, Gemini, Gemma) with [JAX](/wiki/jax) implementations |
| 2024 to 2026 | TensorFlow remains widely deployed in production and on edge devices; Keras 3 reframes Keras as multi-backend on top of TensorFlow, PyTorch, and JAX |

As of 2026, TensorFlow continues active development on a roughly quarterly release cadence, with TF 2.x as the supported line and ongoing investment in [TensorFlow Lite](/wiki/tensorflow_lite) / LiteRT, [TensorFlow.js](/wiki/tensorflow_js), and TPU support.

## strengths and limitations

TensorFlow's enduring strengths include:

- A mature, batteries-included production stack (TFX, [TensorFlow Serving](/wiki/tensorflow_serving), [TensorFlow Lite](/wiki/tensorflow_lite), [TensorFlow.js](/wiki/tensorflow_js)).
- First-class support for [TPUs](/wiki/tpu) through `tf.distribute.TPUStrategy` and [Cloud TPU](/wiki/cloud_tpu).
- Strong tooling for visualization (TensorBoard), model analysis, fairness indicators, and model cards.
- Portability across CPU, GPU, TPU, mobile, microcontrollers, and the browser from a single source of truth.

Frequently cited limitations include:

- A historically larger and more fragmented API surface (multiple ways to do the same thing across 1.x and 2.x styles).
- A steeper learning curve for newcomers than [PyTorch](/wiki/pytorch), particularly when crossing between eager and graph modes.
- Slower iteration in the research community compared with PyTorch and JAX.
- The deprecated [Estimator](/wiki/estimator) API and removed `tf.contrib` left lingering legacy code in older tutorials.

## index of tensorflow-related wiki entries

The following entries on the AI Wiki cover TensorFlow concepts, components, and surrounding hardware in more depth.

- [Cloud TPU](/wiki/cloud_tpu)
- [Dataset API (tf.data)](/wiki/dataset_api_tf_data)
- [device](/wiki/device)
- [eager execution](/wiki/eager_execution)
- [Estimator](/wiki/estimator)
- [feature engineering](/wiki/feature_engineering)
- [feature spec](/wiki/feature_spec)
- [graph](/wiki/graph)
- [graph execution](/wiki/graph_execution)
- [Layers API (tf.layers)](/wiki/layers_api_tf_layers)
- [metric](/wiki/metric)
- [node (TensorFlow graph)](/wiki/node_tensorflow_graph)
- [operation (op)](/wiki/operation_op)
- [Parameter Server (PS)](/wiki/parameter_server_ps)
- [queue](/wiki/queue)
- [rank (Tensor)](/wiki/rank_tensor)
- [root directory](/wiki/root_directory)
- [SavedModel](/wiki/savedmodel)
- [Saver](/wiki/saver)
- [summary](/wiki/summary)
- [Tensor](/wiki/tensor)
- TensorBoard
- [TensorFlow](/wiki/tensorflow)
- [TensorFlow Playground](/wiki/tensorflow_playground)
- [TensorFlow Serving](/wiki/tensorflow_serving)
- [Tensor Processing Unit (TPU)](/wiki/tensor_processing_unit_tpu)
- [Tensor rank](/wiki/tensor_rank)
- [Tensor shape](/wiki/tensor_shape)
- [Tensor size](/wiki/tensor_size)
- [tf.Example](/wiki/tf_example)
- [tf.keras](/wiki/tf_keras)
- [TPU](/wiki/tpu)
- [TPU chip](/wiki/tpu_chip)
- [TPU device](/wiki/tpu_device)
- [TPU master](/wiki/tpu_master)
- [TPU node](/wiki/tpu_node)
- [TPU Pod](/wiki/tpu_pod)
- [TPU resource](/wiki/tpu_resource)
- [TPU slice](/wiki/tpu_slice)
- [TPU type](/wiki/tpu_type)
- [TPU worker](/wiki/tpu_worker)

## see also

- [TensorFlow](/wiki/tensorflow) (the framework page)
- [Keras](/wiki/keras)
- [PyTorch](/wiki/pytorch)
- [JAX](/wiki/jax)
- [TensorFlow Lite](/wiki/tensorflow_lite)
- [TensorFlow.js](/wiki/tensorflow_js)
- [XLA](/wiki/xla)
- [Automatic differentiation](/wiki/automatic_differentiation)
- [Google Brain](/wiki/google_brain)
- [Machine learning terms](/wiki/machine_learning_terms)

## references

1. Abadi, Martin et al. "TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems." Preliminary white paper, Google Research, November 2015. https://www.tensorflow.org/about/bib
2. Abadi, Martin et al. "TensorFlow: A System for Large-Scale Machine Learning." 12th USENIX Symposium on Operating Systems Design and Implementation (OSDI 16), 2016.
3. TensorFlow project. "TensorFlow 2.0 is now available." TensorFlow Blog, September 30, 2019. https://blog.tensorflow.org/2019/09/tensorflow-20-is-now-available.html
4. TensorFlow project. "Effective TensorFlow 2." TensorFlow Guide. https://www.tensorflow.org/guide/effective_tf2
5. TensorFlow project. "Migrate from TensorFlow 1.x to TensorFlow 2." https://www.tensorflow.org/guide/migrate
6. TensorFlow project. "Distributed training with TensorFlow." https://www.tensorflow.org/guide/distributed_training
7. TensorFlow project. "Cloud TPU Documentation." https://cloud.google.com/tpu/docs
8. TensorFlow project. "TensorFlow Lite (LiteRT) overview." https://ai.google.dev/edge/litert
9. TensorFlow project. "TensorFlow.js." https://www.tensorflow.org/js
10. TensorFlow project. "TensorFlow Extended (TFX)." https://www.tensorflow.org/tfx
11. TensorFlow project. "Introducing Keras 3.0." Keras Blog, November 2023. https://keras.io/keras_3/
12. Vaswani, Ashish et al. "Attention Is All You Need." NeurIPS 2017.
13. He, Horace. "The State of Machine Learning Frameworks in 2019." The Gradient, October 2019. https://thegradient.pub/state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/
14. Wikipedia. "TensorFlow." https://en.wikipedia.org/wiki/TensorFlow
15. Wikipedia. "PyTorch." https://en.wikipedia.org/wiki/PyTorch
16. Wikipedia. "Google JAX." https://en.wikipedia.org/wiki/Google_JAX
17. Jouppi, Norman P. et al. "In-Datacenter Performance Analysis of a Tensor Processing Unit." ISCA 2017.
18. Chollet, Francois. *Deep Learning with Python*, 2nd edition. Manning, 2021.

