Тепловая карта Grad CAM

Не знаю, как исправить ошибку. Указываю последний сверточный слой (точно последний, вывод в консоль), но все равно получаю ошибку

def generate_heatmap(image_path, prediction):
    global result_image_path
    img = cv2.imread(image_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img_resized = cv2.resize(img, (IMG_SIZE, IMG_SIZE))

    img_array = preprocess_image(image_path)

    last_conv_layer = model.get_layer("conv2d_2") 

    grad_model = tf.keras.models.Model([model.inputs], [last_conv_layer.output, model.output])

    with tf.GradientTape() as tape:
        conv_output, predictions = grad_model(img_array)
        class_channel = predictions[:, 0] 

    grads = tape.gradient(class_channel, conv_output)

    pooled_grads = K.mean(grads, axis=(0, 1, 2))

    conv_output = conv_output.numpy()[0]
    pooled_grads = pooled_grads.numpy()

    for i in range(conv_output.shape[-1]):
        conv_output[:, :, i] *= pooled_grads[i]

    heatmap = np.mean(conv_output, axis=-1)

    heatmap = np.maximum(heatmap, 0)
    heatmap = heatmap / np.max(heatmap)

    heatmap = cv2.resize(heatmap, (img_resized.shape[1], img_resized.shape[0]))
    heatmap = np.uint8(255 * heatmap)

    heatmap_colored = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)
    superimposed_img = cv2.addWeighted(img_resized, 0.7, heatmap_colored, 0.3, 0)

    if prediction > 0.9:
        plt.title(f"Предполагаемая пневмония \nВероятность - {prediction * 100:.2f}%")
        result_image_path = "result_pneumonia_heatmap.jpg"
    else:
        plt.title("Патология не обнаружена")
        result_image_path = "result_no_pneumonia_heatmap.jpg"

    plt.imshow(superimposed_img)
    plt.axis("off")
    plt.savefig(result_image_path)
    plt.show()

и вот сама ошибка

Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\tkinter\__init__.py", line 1967, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "c:\Users\usr\Desktop\diplom\main.py", line 115, in analyze_xray
    generate_heatmap(image_path, prediction)
  File "c:\Users\usr\Desktop\diplom\main.py", line 55, in generate_heatmap
    grad_model = tf.keras.models.Model([model.inputs], [last_conv_layer.output, model.output])
                                                                                ^^^^^^^^^^^^
  File "C:\Users\usr\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\keras\src\ops\operation.py", line 266, in output
    return self._get_node_attribute_at_index(0, "output_tensors", "output")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\usr\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\keras\src\ops\operation.py", line 285, in _get_node_attribute_at_index
    raise AttributeError(
AttributeError: The layer sequential has never been called and thus has no defined output.

Ответы (0 шт):