*In TensorFlow 2.0, tf.placeholder is no longer in use. A placeholder is a variable that we will assign data to at a later point. It allows us to create operations and build the computation graph without the data. *

*In TensorFlow 2.0, we can use tf.function to execute graph operations eagerly.*

*If you want to continue using placeholder in TensorFlow 2.0, use tf.compat.v1.placeholder() 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.*

## Table of contents

## AttributeError: module ‘tensorflow’ has no attribute ‘placeholder’

*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 ‘placeholder’*” tells us that the TensorFlow module does not have the attribute `placeholder()`

. The `placeholder()`

function belongs to the TensorFlow 1.x API.

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 Placeholder?

A Tensorflow placeholder is a variable that holds the place of data that we assign at a later point. Using placeholders allows us to create the computation graph and operations without the requirement of data. Once we create a session, we feed the data into the placeholder. Let’s look at the syntax of the placeholder:

tf.compat.v1.placeholder(dtype, shape=None, name=None)

**Parameters**

`dtype`

:*Required*. The data type of the elements to feed into the tensor`shape`

:*Optional*. Tensor shape. Default is None.`name`

:*Optional*. Name of the operation. Default is None.

**Returns**

- A Tensor to feed a value into

## Example

Let’s look at an example where we try to use a placeholder in TensorFlow 2.0:

# importing Tensorflow import tensorflow as tf print(tf.__version__) # Define a placeholder a = tf.placeholder(tf.float32, None) # Define an operation b = a + 10 # Session as context manager with tf.Session() as session: # Feed data to placeholder operation_res = session.run(b, feed_dict={a: [10, 20, 30, 40]}) print("result: " + str(operation_res))

In the above code, the placeholder has a dtype of `tf.float32`

and set it not to have a specific size.

We create the operation before feeding in the data. The operation adds 10 to the tensor.

We will feed the values into the TensorFlow placeholder using `feed_dict`

when calling `session.run()`

. Let’s run the code to see the result:

2.3.1 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-1-0c4d9505b527> in <module> 5 6 # Define a placeholder ----> 7 a = tf.placeholder(tf.float32, None) 8 9 # Define an operation AttributeError: module 'tensorflow' has no attribute 'placeholder'

The error occurs because the placeholder function 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:

# importing Tensorflow import tensorflow.compat.v1 as tf # disabling eager mode tf.compat.v1.disable_eager_execution() # Define a placeholder a = tf.placeholder(tf.float32, None) # Define an operation b = a + 10 # Session as context manager with tf.Session() as session: # Feed data to placeholder operation_res = session.run(b, feed_dict={a: [10, 20, 30, 40]}) print("result: " + str(operation_res))

We also need to disable Eager mode, which is the default in TensorFlow 2.0. We want to execute the operations using the TensorFlow 1.x Session-based paradigm. Let’s run the code to see the result:

result: [20. 30. 40. 50.]

### 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`

or we can make a direct call using `tf.function`

.

The input parameters of the function take the place of placeholders.

Let’s look at how to add two numbers using `tf.function`

.

import tensorflow as tf @tf.function def add_func(x): y = x + 10 return y x = tf.constant([10, 20, 30, 40]) result = add_func(x) print(result)

Let’s run the code to see the result:

tf.Tensor([20 30 40 50], shape=(4,), dtype=int32)

We successfully used the function to add 10 to every element in the tensor.

## 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 ‘placeholder’ occurs when you try to use a placeholder in TensorFlow 2.0. placeholder is part of the TF1.x API. To solve this error, you can either migrate to TensorFlow 2.0 and use `tf.function`

or use `tf.compat.v1.Session()`

.

For further reading on TensorFlow, go to the articles:

- How To Solve Python AttributeError: module ‘tensorflow’ has no attribute ‘ConfigProto’.
- How to Solve Python AttributeError: module ‘tensorflow’ has no attribute ‘Session’.

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

Have fun and happy researching!