Select Page

How to Solve Python AttributeError: module ‘tensorflow’ has no attribute ‘Session’

by | Machine Learning, Programming, Python, Tips

In TensorFlow 2.0, tf.Session is no longer in use. TensorFlow 2.0 encapsulates graph computations as Python functions instead of using Session making TensorFlow more Pythonic.

If you want to continue using Session in TensorFlow 2.0, use tf.compat.v1.Session() instead.

You can follow the migration guide to migrate your TensorFlow code from TensorFlow 1.x to TensorFlow 2.

This tutorial will go through the error in detail and how to solve it with code examples.


AttributeError: module ‘tensorflow’ has no attribute ‘Session’

AttributeError occurs in a Python program when we try to access an attribute (method or property) that does not exist for a particular object. The part “‘module ‘tensorflow’ has no attribute ‘Session’” tells us that the TensorFlow module does not have the attribute Session(). The Session() class belongs to TensorFlow 1.x API, and we use it to run TensorFlow operations.

Generally, if the AttributeError refers to a module not having an attribute, either the functionality is under a different name or deprecated. Consult the documentation of the module to find where functionalities and sub-modules are.

Do not name python scripts after module names. For example, naming a script tensorflow.py. If you try:

import tensorflow as tf

you will import the script file tensorflow.py under your current working directory, rather than the actual TensorFlow module. The Python interpreter searches for a module first in the current working directory, then the PYTHONPATH, then the installation-dependent default path. You can name a script after its functionality instead.

What is a TensorFlow Session?

A Session is a class for running TensorFlow operations. A Session object encapsulates the environment to execute Operation objects and evaluate Tensor objects. We can create a Session in two ways, the standard object instantiation and using the context manager.

A session can own resources, which need to be released when they are no longer required. We can do this using the tf.Session.close method on the Session object or use the session as a context manager.

Let’s look at the two implementations:

# Object instantiation

sess = tf.Session()
sess.run(...)
sess.close()

# Context manager
with tf.Session as sess:
    sess.run(...)

We create a graph when we launch a session, and the Session returns a graph_pb2.GraphDef proto containing the nodes for all the Operations in the underlying TensorFlow graph.

Example

Let’s look at an example of defining a session to execute a graph operation.

import tensorflow as tf 

print(tf.__version__)

# Initialize session using tf.Session

with tf.Session() as sess:

    a = tf.constant(3.0)

    b = tf.constant(4.0)

    c = a + b

    # Execute addition operation 

    print(sess.run(c))

Let’s run the code to see what happens:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-12-e18551284c0a> in <module>
      1 import tensorflow as tf
----> 2 with tf.Session() as sess:
      3     a = tf.constant(3.0)
      4     b = tf.constant(4.0)
      5     c = a + b

AttributeError: module 'tensorflow' has no attribute 'Session'

The error occurs because the Session class is no longer present in TensorFlow 2.0.

Solution #1: Use tf.compat.v1

We can use the tf.compat.v1 module to solve this error. The module contains the complete TF1.x API with its original semantics. Generally, you should avoid using the legacy compat.v1 APIs for any new code you write in TensorFlow 2.0, but this approach is suitable for previously written code. Let’s look at the revised code:

import tensorflow as tf 

# Initialize session using tf.compat.v1.Session

with tf.compat.v1.Session() as sess:

    a = tf.constant(3.0)

    b = tf.constant(4.0)

    c = a + b

    print(sess.run(c))

Let’s run the code to get the result:

7.0

Solution #2: Use tf.function

TensorFlow 2 uses functions instead of sessions, which integrates better with Python runtime. tf.function compiles a function into a callable TensorFlow graph. We can define a function with the decorator @tf.function. Let’s look at how to add two numbers using tf.function:

import tensorflow as tf

@tf.function

def compute_add(x, y):

    return tf.add(x, y)

result = compute_add(3, 4)

print(result)
tf.Tensor(7, shape=(), dtype=int32)

TensorFlow 1.x vs TensorFlow 2

TensorFlow 2 follows a fundamentally different programming paradigm from TensorFlow 1.x. There are different runtime behaviors around execution, variables, control flow, tensor shapes, and tensor equality comparisons. TensorFlow 2 is preferable to use as it removes redundant APIs and makes APIs more consistent.

To migrate to TensorFlow 2, follow the TF1.x to TF2 migration guide.

Summary

Congratulations on reading to the end of this tutorial! The AttributeError: module ‘tensorflow’ has no attribute ‘Session’ occurs when you try to create a Session to execute Operations or evaluate Tensors in TensorFlow 2.0. Session is a TF1.x class. To solve this error, you can either migrate to TensorFlow 2.0 and use the updated APIs or use tf.compat.v1.Session().

For further reading on TensorFlow, go to the articles:

Go to the online courses page on Python to learn more about Python for data science and machine learning.

Have fun and happy researching!