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 ?