TensorFlow
TensorFlow is an open-source package to support deep learning, originally developed at Google. Keras is an Application Programming Interface (API) that provides high-level and user-friendly access to the numerical routines embedded within TensorFlow. Users can choose to program directly using the lower-level TensorFlow API, but many prefer the simpler interface provided by Keras, and that is what we will emphasize in this tutorial.
Keras originally began as a separate project that supported a variety of different deep learning backends, but has merged more closely with TensorFlow over time, and at present, is bundled as part of the overall TensorFlow package. TensorFlow underwent substantial revision in progressing from version 1 to version 2, and some of the code examples that one can find online are in fact built around the earlier version 1 API, so care should be taken when looking for insight from such materials. In fact, even within version 2, there has been some evolution of the API as Keras has become more tightly integrated as a submodule within the Python tensorflow module. In this tutorial, we will only address the use of reasonably recent versions of the API.
At its core, TensorFlow supports the creation and manipulation of tensors, which are analogous to and can be easily interconverted with numpy arrays. Importantly, these tensors are also imbued with support for automatic differentiation, which enables them to be used for numerically efficient training based on gradient descent and related algorithms. Keras simplifies the process of constructing neural networks of a desired topology and fitting the network parameters to data.
The TensorFlow project maintains considerable documentation not just describing the different APIs that make up the ecosystem, but also providing multiple tutorials that enable users at various levels of background to explore the use of the software. Also useful is the fact that many of these tutorials can be run interactively in the Google Colaboratory (Colab), an online resource that can host Jupyter notebooks running Python code.