TensorFlow Basics for Beginners Step-by-Step Python Guide


TensorFlow Basics for Beginners Step-by-Step Python Guide

Introduction 

If you're a machine learning student, you've likely come across TensorFlow. This powerful tool has become a standard in the industry, widely used by machine learning and deep learning professionals.

TensorFlow is an open-source library designed to create machine learning models, making it an essential platform for anyone interested in machine learning and AI.

For those looking to break into machine learning and artificial intelligence, mastering TensorFlow is a must. If you're curious about what TensorFlow in Python is and how it works, you've come to the right place—this article will give you a complete overview of the technology.

Here, you'll learn to use TensorFlow in Python through various hands-on examples. Building your TensorFlow skills will elevate your machine learning abilities and empower you with advanced data analysis techniques.

What is TensorFlow?

TensorFlow is a comprehensive open-source platform for machine learning, specializing in deep neural networks. Unlike standard machine learning, which typically processes structured data, deep learning can analyze vast amounts of unstructured data, opening up new possibilities for complex data interpretation.

TensorFlow offers an extensive set of libraries, tools, and community resources, empowering developers to create and deploy advanced machine learning applications. One of its key strengths is its use of Python, which provides a user-friendly front-end API while harnessing the speed of optimized C++ for high-performance operations.

Originally developed by Google Brain for internal use, TensorFlow has since become a widely adopted platform for both research and production, fueling innovation in machine learning across industries.

How to install TensorFlow ?

To install TensorFlow, follow these steps:

Step 1: Set Up Python

Ensure you have Python 3.7–3.10 installed. You can check by running:

python --version
If Python isn’t installed, download it from Python's official website.


Step 2: Create a Virtual Environment (Optional but Recommended)

Setting up a virtual environment keeps TensorFlow and its dependencies isolated:

python -m venv my_env
source my_env/bin/activate  # On macOS/Linux
my_env\Scripts\activate  # On Windows

Step 3: Install TensorFlow

Use `pip` to install TensorFlow. The standard version is `tensorflow` for CPUs, and `tensorflow-gpu` for machines with a compatible GPU.

pip install tensorflow  # for CPU
pip install tensorflow-gpu  # for GPU (optional)

 Step 4: Verify Installation

Open Python and check the TensorFlow version:

import tensorflow as tf
print(tf.__version__)

Some TensorFlow Fundamentals

Now that we have a foundational understanding of TensorFlow, let's explore its core principles in more detail.

We'll start with tensors, the fundamental building blocks of TensorFlow and the basis of its name. Here’s a quick overview of essential TensorFlow concepts.

Tensors

In TensorFlow, a tensor is a multi-dimensional array that holds data in various forms, serving as the core data structure in the library. Unlike a one-dimensional vector or two-dimensional matrix, a tensor can have any number of dimensions. Each tensor contains values of the same data type and a defined shape, which indicates its dimensionality. For instance, a scalar is a zero-dimensional tensor, a vector is one-dimensional, and a matrix is two-dimensional.

tensor is a multi-dimensional array


Shape

In the TensorFlow Python library, the shape represents the dimensions of a tensor. Simply put, a tensor’s shape is defined by the number of elements in each dimension. During graph creation, TensorFlow automatically infers these shapes. The rank, or the number of dimensions, can either be known or unknown. If the rank is known, the size of each dimension may still be either defined or undefined.

TENSOR SHQP


Type

The type specifies the kind of data that a tensor can hold, with all values in a tensor typically sharing the same data type. TensorFlow supports various data types, including:

- Integers

- Floating-point numbers

- Unsigned integers

- Booleans

- Strings

- Quantized integers

- Complex numbers

Graph

Graphs are data structures that consist of a collection of `tf.Operation` objects, which define computational units, and `tf.Tensor` objects, which represent data units that flow between operations. These graphs are defined within the context of `tf.Graph`. Since they are data structures, graphs can be saved, executed, and restored independently of the original Python code.

When visualized on TensorBoard, a TensorFlow Python graph depicting a two-layer neural network appears as follows.

TensorFlow Python graph

The benefits of graphs

The benefits of using graphs in TensorFlow are numerous:

1. Efficient Execution: Graphs enable TensorFlow to optimize the computation by arranging operations in a way that minimizes memory usage and execution time, leading to more efficient execution of models.

2. Parallelism: With graphs, TensorFlow can execute multiple operations in parallel, making it easier to utilize multi-core processors and distributed systems, enhancing performance on large datasets or complex models.

3. Portability: Since a graph is a standalone data structure, it can be saved, restored, and deployed independently of the original Python code. This allows for easy transfer and execution across different platforms, including on mobile devices or in production environments.

4. Debugging and Visualization: TensorFlow provides tools like TensorBoard to visualize and debug the graph, offering insights into the flow of data and operations. This helps in understanding and troubleshooting complex models.

5. Reusability: Once a graph is defined, it can be reused for different computations, such as training, evaluation, and inference, without having to rebuild the entire structure each time.

6. Compatibility: TensorFlow graphs are compatible with various hardware accelerators like GPUs and TPUs, enabling the scaling of computation on specialized hardware for faster model training and inference.

7. Separation of Computation and Execution: By decoupling the definition of the computation (graph) from its execution (session), graphs offer greater flexibility in managing resources and optimizing computations before they are run.

Session

In TensorFlow, a Session is an environment for running operations defined in a computational graph. It is responsible for executing the graph, evaluating the tensors, and handling the operations that were defined during the graph construction phase

Let’s look at an example:

Defining the Graph:

A graph is defined that includes a variable and three operations: the variable retrieves its current value, the `initialize` operation sets the variable’s initial value to 42, and the `assign` operation updates the variable's value to 13.

import tensorflow as tf

# Step 1: Create a new computational graph
graph = tf.Graph()

# Step 2: Define the operations inside the graph context
with graph.as_default():
    # Define a variable with an initial value of 42
    variable = tf.Variable(42, name='foo')
    
    # Define an initializer operation for the variable
    initialize = tf.global_variables_initializer()
    
    # Define an assign operation that changes the variable's value to 13
    assign = variable.assign(13)


Just as a side note, TensorFlow automatically creates a default graph for you, so the first two lines of code above are optional. If no graph is explicitly specified, the sessions in the following section will use the default graph.

Using a Session to Run Computations:

In TensorFlow, a Session is used to run operations and evaluate tensors defined in a computational graph. The session manages the execution of operations and provides the results based on the input data. Here's how you can use a session to run computations:

Steps to Use a Session:

  • Create a Graph: First, you define a computational graph by specifying operations and variables.
  • Create a Session: You then create a tf.Session() to run the graph.
  • Run Operations: With the session, you can execute operations, such as variable initialization or evaluation of tensors.
  • Close the Session: After the computations are done, you should close the session to free up resources.

# Step 2: Create a session to run the graph
with tf.Session(graph=graph) as sess:
    # Step 3: Initialize the variables
    sess.run(initialize)
    
    # Step 4: Evaluate and print the variable’s initial value
    initial_value = sess.run(variable)
    print("Initial value of variable:", initial_value)  # Output: 42
    
    # Step 5: Run the assign operation to change the variable’s value
    sess.run(assign)
    
    # Step 6: Evaluate and print the variable’s updated value
    updated_value = sess.run(variable)
    print("Updated value of variable:", updated_value)  # Output: 13


Operators

In TensorFlow, operators are fundamental building blocks used to perform mathematical, logical, and array operations. They enable TensorFlow to execute a variety of computations essential for machine learning tasks.

Here are some list of frequently used operations:

  • tf.add(a, b)
  • tf.substract(a, b)
  • tf.multiply(a, b)
  • tf.div(a, b)
  • tf.pow(a, b)
  • tf.exp(a)
  • tf.sqrt(a)

To calculate the square of a value using TensorFlow, you can use the tf.square() function (not tf.sqrt(), which calculates the square root). Here’s a simple example to create a tensor and compute its square:

import tensorflow as tf

# Create a tensor with a floating-point value
x = tf.constant(5.0)

# Compute the square of x
x_square = tf.square(x)

# Display the result
print("The value of x is:", x.numpy())
print("The square of x is:", x_square.numpy())

This will produce: 

The value of x is: 5.0
The square of x is: 25.0

# Add

In TensorFlow, the tf.add() function allows you to perform element-wise addition between two tensors. Here’s a basic example to demonstrate how to use tf.add():

import tensorflow as tf

# Create two tensors
a = tf.constant(3.0)
b = tf.constant(4.0)

# Add the tensors
result = tf.add(a, b)

# Display the result
print("The value of a is:", a.numpy())
print("The value of b is:", b.numpy())
print("The result of a + b is:", result.numpy())

Output:

The value of a is: 3.0
The value of b is: 4.0
The result of a + b is: 7.0

How Do TensorsFlow Work?

TensorFlow operates as a flexible and powerful machine learning framework by using a computational graph where nodes represent operations and edges define the flow of data, or tensors, through these operations. At its core, TensorFlow handles data in the form of multi-dimensional arrays called tensors, which flow through the graph to execute tasks. 

TensorFlow provides numerous operations—like addition, multiplication, and neural network functions—that are applied to tensors, enabling it to build and execute complex models such as neural networks. In TensorFlow 2, Eager Execution is enabled by default, allowing for dynamic, interactive execution of operations, which simplifies debugging and makes TensorFlow more intuitive. TensorFlow also integrates with Keras, a high-level API for constructing and training models easily, allowing users to stack layers, design custom model architectures, and optimize model parameters with ease. 

To train models, TensorFlow automatically calculates gradients with backpropagation and optimizes them with gradient-based optimizers, like Adam or SGD, allowing for fine-tuning to improve model accuracy. Additionally, TensorFlow’s computational graph can be distributed across multiple devices, including CPUs, GPUs, and TPUs, taking advantage of each device’s hardware to maximize speed and efficiency. Once trained, models can be serialized and exported for deployment in various formats, making TensorFlow suitable for mobile, web, and production environments. 

Overall, TensorFlow’s combination of flexibility, ease of model building, and efficient execution on various devices makes it one of the most widely used frameworks for machine learning and deep learning.

TensorFlow Computation Graph

In TensorFlow, a computation graph is a network of nodes, where each node performs operations like multiplication, addition, or evaluates multivariate equations. To create a graph, run a session, and execute operations, developers write code in TensorFlow's Python API. Each variable defined in the code acts as a node, enabling us to carry out various mathematical operations, including addition and multiplication.

Here’s an example of how to make a computation graph:

Let’s say we wish to perform the following calculation: F(a,b,c) = ((a + b) * c) - d

import tensorflow as tf

# Step 1: Define constants
a = tf.constant(5, name='a')
b = tf.constant(3, name='b')
c = tf.constant(4, name='c')
d = tf.constant(2, name='d')

# Step 2: Create the computation graph
with tf.name_scope('ComputationGraph'):
    # Define operations
    addition = tf.add(a, b, name='Addition')  # a + b
    multiplication = tf.multiply(addition, c, name='Multiplication') 
    result = tf.subtract(multiplication, d, name='FinalResult') 

# Step 3: Eager execution (default in TensorFlow 2.x)
print("Result of the computation graph:", result.numpy())  # Output: 22

TensorFlow’s Basic Programming Elements

TensorFlow provides a rich set of programming elements that allow you to define, train, and deploy machine learning models. Here’s an overview of the basic programming elements in TensorFlow:

1. Tensor

- Definition: Tensors are the fundamental data structures in TensorFlow, similar to NumPy arrays. They can represent scalars, vectors, matrices, or higher-dimensional arrays.

- Usage: Tensors are immutable and can be created using various functions, such as `tf.constant()`, `tf.ones()`, `tf.zeros()`, `tf.random.uniform()`, etc.

import tensorflow as tf

scalar = tf.constant(5)                  # Scalar (0D Tensor)
vector = tf.constant([1, 2, 3])          # Vector (1D Tensor)
matrix = tf.constant([[1, 2], [3, 4]])   # Matrix (2D Tensor)

2. Variables

- Definition: Variables are mutable tensors. They are used to store the weights and biases of models, allowing them to be modified during training.

- Usage: Variables are created using `tf.Variable()`.

Here’s an example:

weights = tf.Variable(tf.random.normal([2, 3]), name='weights')  # A 2x3 matrix of weights
biases = tf.Variable(tf.zeros([3]), name='biases')               # A vector of biases

3. Operations (Ops)

- Definition: Operations in TensorFlow are functions that take one or more tensors as input and output one or more tensors. Operations can be mathematical (like addition or multiplication) or logical.

- Usage: Operations can be created using functions such as `tf.add()`, `tf.multiply()`, `tf.matmul()`, etc.

Here’s an example:

a = tf.constant(3)
b = tf.constant(5)
c = tf.add(a, b)                     # Addition
d = tf.multiply(a, b)                # Multiplication
matrix_product = tf.matmul(matrix, weights)  # Matrix multiplication

4. Placeholders (TensorFlow 1.x)

- Definition: Placeholder tensors are used to feed data into the graph without hardcoding it directly into it. This feature is primarily used in TensorFlow 1.x. In TensorFlow 2.x, the concept of `tf.function` provides a similar capability.

- Usage: Placeholders are created using `tf.placeholder()`, and they require a session to run.

# TensorFlow 1.x example
import tensorflow as tf

x = tf.placeholder(tf.float32, shape=(None, 2))  # Placeholder for a matrix with an unspecified number of rows
y = tf.placeholder(tf.float32, shape=(None, 1))  # Placeholder for a matrix with an unspecified number of rows

5. Models

- Definition: TensorFlow allows you to create machine learning models using layers, either through low-level APIs for fine control or high-level APIs like Keras for quick prototyping and ease of use.

- Usage: You can use `tf.keras.Sequential` for simple models or `tf.keras.Model` for more complex architectures.

# Define a simple neural network using Keras
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu', input_shape=(2,)), # Input layer
    tf.keras.layers.Dense(1)  # Output layer
])

Example of a session:

In TensorFlow, a session is an environment where all operations (like computations) are executed. When you define a computational graph (a series of operations and tensors), you don't execute it directly. Instead, you launch a session to evaluate the nodes of the graph.

The command sess = tf.Session() creates a session in TensorFlow. Once the session is created, you can run specific operations or tensors within the graph by calling sess.run(), which will execute the required part of the graph. 

Example:

import tensorflow as tf

# Create a simple computational graph
a = tf.constant(2)
b = tf.constant(3)
c = a + b

# Start a session to run the graph
sess = tf.Session()

# Run the operation to evaluate 'c'
result = sess.run(c)

# Print the result
print(result)

# Close the session
sess.close()

In this example:

  • We define two constants a and b, and their sum c.
  • We start a session using sess = tf.Session().
  • We use sess.run(c) to evaluate the value of c.
  • Finally, we close the session with sess.close() to release resources.

How to Create TensorFlow Pipeline

Creating a pipeline in TensorFlow involves setting up a sequence of data preprocessing steps and feeding data into your model efficiently. Here's a simple guide to building a pipeline using TensorFlow’s tf.data API, which provides powerful tools for creating input pipelines that are both efficient and easy to manage.

Steps to Create a TensorFlow Data Pipeline

1. Define Data Sources

Load the data from files (like TFRecords, CSV files, or image files) or create a dataset from Python objects (like lists or arrays).

2. Create a tf.data.Dataset Object

This object will hold your data. You can create it from various sources, such as:

  • tf.data.Dataset.from_tensor_slices() for in-memory data.
  • tf.data.TFRecordDataset() for reading from TFRecord files.

3. Apply Transformations

Use the tf.data.Dataset methods to transform the data. Some common transformations are:

  • map: Apply a function to each element.
  • shuffle: Randomize the data order.
  • batch: Combine data into batches.
  • repeat: Repeat the dataset for multiple epochs.

4. Prefetch for Performance Optimization

Using prefetch can help overlap data preprocessing and model execution.

5. Iterate Through the Pipeline

Use the dataset directly within a TensorFlow model training loop or evaluation.

Example Pipeline: Loading and Preprocessing Image Data

Here’s a simple example of creating a pipeline for image data preprocessing and feeding it to a model.

import tensorflow as tf

# Step 1: Define data sources
def parse_image(filename, label):
    image_string = tf.io.read_file(filename)
    image = tf.image.decode_jpeg(image_string, channels=3)  # Decode image
    image = tf.image.resize(image, [224, 224])  # Resize to 224x224
    image = tf.cast(image, tf.float32) / 255.0  # Normalize to [0, 1]
    return image, label

# Example data: list of image paths and labels
image_paths = ["path/to/image1.jpg", "path/to/image2.jpg", ...]
labels = [0, 1, ...]  # Corresponding labels

# Step 2: Create Dataset object
dataset = tf.data.Dataset.from_tensor_slices((image_paths, labels))

# Step 3: Apply transformations
dataset = dataset.map(parse_image)         # Parse and preprocess images
dataset = dataset.shuffle(buffer_size=100) # Shuffle for randomness
dataset = dataset.batch(32)                # Batch data
dataset = dataset.prefetch(tf.data.AUTOTUNE) 
# Step 4: Use the pipeline
for images, labels in dataset:
    # Model training or evaluation step
    pass


Conclusion

TensorFlow is a prominent AI tool, and if you want to work in AI or machine learning, you should be familiar with it.

Machine learning and artificial intelligence are two examples of technological applications that are playing a major part in the world’s progress. Things that formerly looked like a science fiction film storyline are now a reality. Machine learning affects all aspects of our life, from suggesting Netflix movies and virtual assistants to self-driving cars.TensorFlow, the open-source library is undoubtedly beneficial to developers and aspiring professionals working on machine learning-driven technologies.

Becoming a Master in the field of machine learning is one of the most difficult tasks. However, a big thanks to Google’s for developing a toolkit like TensorFlow, Gathering data, building models, and predicting in the field of machine learning has become easier than ever before thanks to TensorFlow, and it also aids in optimizing possible trends, which was previously one of the most challenging jobs.