Below may helps you ( please modify VGG and prediction layer).
You can set [data_augumentation] and [preprocess_input] to “input_tensor” option.
However it is not good to get a deterministic heatmap.
    
base_model = tf.keras.applications.VGG16(input_shape=(229,229,3),
                                       include_top=False,
                                       weights='imagenet',
                                       classes = len(class_names))

last_layer=base_model.layers[-1]
last_layer_outputshape=last_layer.output_shape
dense_unit_to_set=last_layer_outputshape[-1]

x2=base_model.output
x2 = tf.keras.layers.GlobalAveragePooling2D()(x2)
x2 = tf.keras.layers.Dropout(0.2)(x2)

x2=tf.keras.layers.Dense(dense_unit_to_set,activation='relu')(x2)

prediction_layer = tf.keras.layers.Dense(len(class_names),activation="softmax")#
x2 = prediction_layer(x2)

model = tf.keras.Model(inputs=base_model.input, outputs=x2)
    

base_learning_rate = 0.0001
batch_size= BATCH_SIZE
momentum_usage=0.99
initial_epochs = 50
sgd=tf.keras.optimizers.SGD(learning_rate=base_learning_rate,momentum=momentum_usage)

model.compile(optimizer=sgd,loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),metrics=['accuracy'])