How to convert a tensor into a numpy array when using Tensorflow with Python bindings?

## Solution

**TensorFlow 2.x**

Eager Execution is enabled by default, so just call ** .numpy()** on the Tensor object.

```
import tensorflow as tf
a = tf.constant([[1, 2], [3, 4]])
b = tf.add(a, 1)
a.
```**numpy()**
# array([[1, 2],
# [3, 4]], dtype=int32)
b.**numpy()**
# array([[2, 3],
# [4, 5]], dtype=int32)
tf.multiply(a, b).**numpy()**
# array([[ 2, 6],
# [12, 20]], dtype=int32)

See NumPy Compatibility for more. It is worth noting (from the docs),

Numpy array may share a memory with the Tensor object.

Any changes to one may be reflected in the other.

Bold emphasis mine. A copy may or may not be returned, and this is an implementation detail based on whether the data is in CPU or GPU (in the latter case, a copy has to be made from GPU to host memory).

**But why am I getting the AttributeError: 'Tensor' object has no attribute 'numpy'?**.

A lot of folks have commented about this issue, there are a couple of possible reasons:

- TF 2.0 is not correctly installed (in which case, try re-installing), or
- TF 2.0 is installed, but eager execution is disabled for some reason. In such cases, call
`tf.compat.v1.enable_eager_execution()`

to enable it, or see below.

If Eager Execution is disabled, you can build a graph and then run it through `tf.compat.v1.Session`

:

```
a = tf.constant([[1, 2], [3, 4]])
b = tf.add(a, 1)
out = tf.multiply(a, b)
out.eval(session=
```**tf.compat.v1.Session()**)
# array([[ 2, 6],
# [12, 20]], dtype=int32)

See also TF 2.0 Symbols Map for a mapping of the old API to the new one.

Source: StackOverflow.com