It would be a challenge nowadays to find a machine learning engineer who has heard nothing about TensorFlow. Initially created by Google Brain team for some internal purposes, such as spam filtering on Gmail, it was open-sourced in 2015 and became the most popular deep learning framework in the next few years.
Tensorflow is often used for solving deep learning problems and for training and evaluating processes up to the model deployment. Apart from machine learning purposes, TensorFlow can be also used for building simulations, based on partial derivative equations. That’s why it is considered to be an all-purpose tool for machine learning engineers.
TensorFlow’s large and continuously-growing following has contributed to the creation of Tensorflow bindings for languages including Julia, C#, Haskell, and Ruby. TensorFlow has also been adapted to run on different platforms; besides Linux, macOS, and Windows, you can use Tensorflow models on iOS, Android, and Raspberry Pi.
The biggest benefit of TensorFlow is that it allows the use of different level APIs to get to the needed degree of abstraction. For example, creating new models with the high-level Estimators API, which is useful for training, prediction, and deployment functions. However, low-level API gives more freedom for experiments with the model architecture or hyperparameters.
TensorFlow performs mathematical operations on large multidimensional arrays of numbers, which can be generalized as tensors. For example, the tensor of zero-shape is a number, while tensor of shape 1 is a vector and tensor of shape 2 is a matrix, and so on.
To better understand how TensorFlow works, imagine a directed graph with tensors on its edges, and nodes represented as mathematical operations between tensors. Computations on this graph are executed within sessions. Such abstraction derives from the low-level programming concept called “lazy evaluation” where data and operations are initiated and then computed through the session. This approach allows using CPU along with GPU as well as multiple GPUs for parallel computations, which make all the processes, especially training, significantly faster.