I am writing my own metric call-back functions where I use sklearn to calculate the metrics and for that I need to have the y_true and y_pred tensors as numpy arrays. My functions look like this:

```
def precision_macro(y_true, y_pred):
# get the y_true and y_pred tensors as 1-D numpy array
y_true_array = np.array(true)
y_pred_array = np.array(pred)
....................
....................
CALCULATIONS
....................
....................
precision = precision_score(y_true_array, y_pred_array, average="macro", zero_division=0)
return precision
```

Everything works fine if I set the `run_eargly=True`

during the compile call like this:

```
model.compile(optimizer=keras.optimizers.RMSprop(learning_rate=lr),
loss='binary_crossentropy',
metrics=model_metrics,
run_eagerly=True)
```

but this is very costly and way slower than with the flag set to False but if I don’t set the flag to True I have a problem with the conversion. Here are things I have tried without setting the run_eagrly flag to True and didn’t work:

If I just don’t set the run_eagerly flag, I get the following error

NotImplementedError: Cannot convert a symbolic Tensor (ExpandDims:0) to a numpy array. This error may indicate that you’re trying to pass a Tensor to a NumPy call, which is not supported

Then I tried

```
import tensorflow.keras.backend as K
def precision_macro(y_true, y_pred):
# get the y_true and y_pred tensors as 1-D numpy array
y_true_array = K.eval(y_true)
y_pred_array = K.eval(y_pred)
....................
```

Or I try to call the numpy function on the tensors

```
def precision_macro(y_true, y_pred):
# get the y_true and y_pred tensors as 1-D numpy array
y_true_array = y_true.numpy()
y_pred_array = y_pred.numpy()
....................
```

I also tried run this inside a session like this:

```
import tensorflow.keras.backend as K
import tensorflow as tf
def precision_macro(y_true, y_pred):
sess = tf.compat.v1.Session()
# get the y_true and y_pred tensors as 1-D numpy array
with sess.as_default():
y_true_array = K.eval(y_true)
y_pred_array = K.eval(y_pred)
....................
```

I get the following error for all thress cases

AttributeError: ‘Tensor’ object has no attribute ‘numpy’

I tried to run it like this:

```
import tensorflow.keras.backend as K
import tensorflow as tf
def precision_macro(y_true, y_pred):
sess = tf.compat.v1.Session()
# get the y_true and y_pred tensors as 1-D numpy array
with sess.as_default():
y_true_array = sess.run(y_true)
y_pred_array = sess.run(y_pred)
....................
```

I get the following error

InvalidArgumentError: 2 root error(s) found.

(0) Invalid argument: You must feed a value for placeholder tensor ‘iterator’ with dtype resource

(1) Invalid argument: You must feed a value for placeholder tensor ‘iterator’ with dtype resource

I tried downgrading numpy from `1.19.5`

to `1.18.5`

but that didn’t work either, I get the same errors

I am using `keras = 2.6.`

`tensorflow = 2.6`

`numpy = 1.19.5`

So, can anybody help me ?