Simple way to convert tensor to numpy array without eager mode in TF 2.2

Viewed 1999

I can't find a simple way to convert a tensor to a NumPy array without enabling eager mode, which gives a nice .numpy() method, but also slows down my model training.

I'd be super grateful for your suggestions. For context, I'm writing a custom metric for my TensorFlow model that relies on a scikit learn function, which only takes numpy arrays.

I've tried wrapping the tensors with np.array(), which throws a not implemented error. Also gave sessions and .eval() a go, but didn't get it to work either and seemed like too much for this simple job.

My specific error: NotImplementedError: Cannot convert a symbolic Tensor (model_17/dense_17/Sigmoid:0) to a numpy array.

# Custom metric
def accuracy_ml(y_true, y_pred):
  return accuracy_score(y_true, np.round(y_pred)) # ERROR here feeding tensor to sklearn function

# Model
cnn = simple_model(input_shape=(224, 224, 3),
                   num_classes=10,
                   base_model = base_ResNet101)

lr = 1e-2
loss_fn = tf.keras.losses.BinaryCrossentropy()
metrics = [accuracy_ml]
cnn.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=lr),
            loss=loss_fn,
            metrics=metrics)

# Simple baseline eval that fails
validation_steps=17
loss0, accuracy0 = cnn.evaluate(validation_batches, steps = validation_steps)
1 Answers
Related