I am trying to make a to visualize a heatmap for an image in a CNN using TensorFlow 2. I disabled eager execution because I want to run the model on Apple Silicon M1 GPU, and it has to be disabled. This is the code: (taken from Keras official docs)
def make_gradcam_heatmap(img_array, model, last_conv_layer_name, pred_index=None): grad_model = tf.keras.models.Model( [model.inputs], [model.get_layer(last_conv_layer_name).output, model.output] ) with tf.GradientTape() as tape: last_conv_layer_output, preds = grad_model(img_array) if pred_index is None: pred_index = tf.argmax(preds) class_channel = preds[:, pred_index] grads = tape.gradient(class_channel, last_conv_layer_output) pooled_grads = tf.reduce_mean(grads, axis=(0, 1, 2)) last_conv_layer_output = last_conv_layer_output heatmap = last_conv_layer_output @ pooled_grads[..., tf.newaxis] heatmap = tf.squeeze(heatmap) heatmap = tf.maximum(heatmap, 0) / tf.math.reduce_max(heatmap) return heatmap.numpy()
When I run this function I am receiving the following error:
AttributeError: ‘Tensor’ object has no attribute ‘numpy’
When eager execution is enabled, I do not receive such error and the function runs normally, but as I said, I need it disabled.
How can I overcome this error and make the function work with eager execution disabled?
You only need to call
eval in the tensor instead
Answered By – Pedro Fillastre
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0