Passo 1: Instalação das bibliotecas necessárias
Primeiro, instale as bibliotecas necessárias usando pip:
%pip install tensorflow numpy keras lime
Collecting tensorflow Using cached tensorflow-2.13.0-cp311-cp311-win_amd64.whl (1.9 kB) Requirement already satisfied: numpy in c:\users\gvcer\documents\python\env\lib\site-packages (1.24.3) Collecting keras Using cached keras-2.13.1-py3-none-any.whl (1.7 MB) Collecting lime Using cached lime-0.2.0.1-py3-none-any.whl Collecting tensorflow-intel==2.13.0 (from tensorflow) Using cached tensorflow_intel-2.13.0-cp311-cp311-win_amd64.whl (276.6 MB) Collecting absl-py>=1.0.0 (from tensorflow-intel==2.13.0->tensorflow) Using cached absl_py-1.4.0-py3-none-any.whl (126 kB) Collecting astunparse>=1.6.0 (from tensorflow-intel==2.13.0->tensorflow) Using cached astunparse-1.6.3-py2.py3-none-any.whl (12 kB) Requirement already satisfied: flatbuffers>=23.1.21 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (23.5.26) Collecting gast<=0.4.0,>=0.2.1 (from tensorflow-intel==2.13.0->tensorflow) Using cached gast-0.4.0-py3-none-any.whl (9.8 kB) Collecting google-pasta>=0.1.1 (from tensorflow-intel==2.13.0->tensorflow) Using cached google_pasta-0.2.0-py3-none-any.whl (57 kB) Collecting h5py>=2.9.0 (from tensorflow-intel==2.13.0->tensorflow) Using cached h5py-3.9.0-cp311-cp311-win_amd64.whl (2.7 MB) Requirement already satisfied: libclang>=13.0.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (16.0.6) Requirement already satisfied: opt-einsum>=2.3.2 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (3.3.0) Requirement already satisfied: packaging in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (23.1) Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (4.23.4) Requirement already satisfied: setuptools in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (65.5.0) Requirement already satisfied: six>=1.12.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (1.16.0) Requirement already satisfied: termcolor>=1.1.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (2.3.0) Requirement already satisfied: typing-extensions<4.6.0,>=3.6.6 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (4.5.0) Requirement already satisfied: wrapt>=1.11.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (1.15.0) Collecting grpcio<2.0,>=1.24.3 (from tensorflow-intel==2.13.0->tensorflow) Using cached grpcio-1.56.0-cp311-cp311-win_amd64.whl (4.2 MB) Collecting tensorboard<2.14,>=2.13 (from tensorflow-intel==2.13.0->tensorflow) Using cached tensorboard-2.13.0-py3-none-any.whl (5.6 MB) Requirement already satisfied: tensorflow-estimator<2.14,>=2.13.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (2.13.0) Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorflow-intel==2.13.0->tensorflow) (0.31.0) Requirement already satisfied: matplotlib in c:\users\gvcer\documents\python\env\lib\site-packages (from lime) (3.7.2) Requirement already satisfied: scipy in c:\users\gvcer\documents\python\env\lib\site-packages (from lime) (1.11.1) Requirement already satisfied: tqdm in c:\users\gvcer\documents\python\env\lib\site-packages (from lime) (4.65.0) Requirement already satisfied: scikit-learn>=0.18 in c:\users\gvcer\documents\python\env\lib\site-packages (from lime) (1.3.0) Collecting scikit-image>=0.12 (from lime) Using cached scikit_image-0.21.0-cp311-cp311-win_amd64.whl (22.8 MB) Requirement already satisfied: networkx>=2.8 in c:\users\gvcer\documents\python\env\lib\site-packages (from scikit-image>=0.12->lime) (3.1) Requirement already satisfied: pillow>=9.0.1 in c:\users\gvcer\documents\python\env\lib\site-packages (from scikit-image>=0.12->lime) (10.0.0) Collecting imageio>=2.27 (from scikit-image>=0.12->lime) Using cached imageio-2.31.1-py3-none-any.whl (313 kB) Collecting tifffile>=2022.8.12 (from scikit-image>=0.12->lime) Using cached tifffile-2023.7.10-py3-none-any.whl (220 kB) Collecting PyWavelets>=1.1.1 (from scikit-image>=0.12->lime) Using cached PyWavelets-1.4.1-cp311-cp311-win_amd64.whl (4.2 MB) Collecting lazy_loader>=0.2 (from scikit-image>=0.12->lime) Using cached lazy_loader-0.3-py3-none-any.whl (9.1 kB) Requirement already satisfied: joblib>=1.1.1 in c:\users\gvcer\documents\python\env\lib\site-packages (from scikit-learn>=0.18->lime) (1.3.1) Requirement already satisfied: threadpoolctl>=2.0.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from scikit-learn>=0.18->lime) (3.1.0) Requirement already satisfied: contourpy>=1.0.1 in c:\users\gvcer\documents\python\env\lib\site-packages (from matplotlib->lime) (1.1.0) Requirement already satisfied: cycler>=0.10 in c:\users\gvcer\documents\python\env\lib\site-packages (from matplotlib->lime) (0.11.0) Requirement already satisfied: fonttools>=4.22.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from matplotlib->lime) (4.40.0) Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\gvcer\documents\python\env\lib\site-packages (from matplotlib->lime) (1.4.4) Requirement already satisfied: pyparsing<3.1,>=2.3.1 in c:\users\gvcer\documents\python\env\lib\site-packages (from matplotlib->lime) (3.0.9) Requirement already satisfied: python-dateutil>=2.7 in c:\users\gvcer\documents\python\env\lib\site-packages (from matplotlib->lime) (2.8.2) Requirement already satisfied: colorama in c:\users\gvcer\documents\python\env\lib\site-packages (from tqdm->lime) (0.4.6) Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.13.0->tensorflow) (0.40.0) Collecting google-auth<3,>=1.6.3 (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached google_auth-2.22.0-py2.py3-none-any.whl (181 kB) Collecting google-auth-oauthlib<1.1,>=0.5 (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached google_auth_oauthlib-1.0.0-py2.py3-none-any.whl (18 kB) Collecting markdown>=2.6.8 (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached Markdown-3.4.3-py3-none-any.whl (93 kB) Collecting requests<3,>=2.21.0 (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached requests-2.31.0-py3-none-any.whl (62 kB) Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (0.7.1) Requirement already satisfied: werkzeug>=1.0.1 in c:\users\gvcer\documents\python\env\lib\site-packages (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (2.3.6) Collecting cachetools<6.0,>=2.0.0 (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached cachetools-5.3.1-py3-none-any.whl (9.3 kB) Collecting pyasn1-modules>=0.2.1 (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached pyasn1_modules-0.3.0-py2.py3-none-any.whl (181 kB) Collecting rsa<5,>=3.1.4 (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached rsa-4.9-py3-none-any.whl (34 kB) Requirement already satisfied: urllib3<2.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (1.26.16) Collecting requests-oauthlib>=0.7.0 (from google-auth-oauthlib<1.1,>=0.5->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached requests_oauthlib-1.3.1-py2.py3-none-any.whl (23 kB) Collecting charset-normalizer<4,>=2 (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl (96 kB) Requirement already satisfied: idna<4,>=2.5 in c:\users\gvcer\documents\python\env\lib\site-packages (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (3.4) Collecting certifi>=2017.4.17 (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) Using cached certifi-2023.5.7-py3-none-any.whl (156 kB) Requirement already satisfied: MarkupSafe>=2.1.1 in c:\users\gvcer\documents\python\env\lib\site-packages (from werkzeug>=1.0.1->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (2.1.3) Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in c:\users\gvcer\documents\python\env\lib\site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (0.5.0) Requirement already satisfied: oauthlib>=3.0.0 in c:\users\gvcer\documents\python\env\lib\site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (3.2.2) Installing collected packages: tifffile, rsa, PyWavelets, pyasn1-modules, markdown, lazy_loader, keras, imageio, h5py, grpcio, google-pasta, gast, charset-normalizer, certifi, cachetools, astunparse, absl-py, scikit-image, requests, google-auth, requests-oauthlib, lime, google-auth-oauthlib, tensorboard, tensorflow-intel, tensorflow Successfully installed PyWavelets-1.4.1 absl-py-1.4.0 astunparse-1.6.3 cachetools-5.3.1 certifi-2023.5.7 charset-normalizer-3.2.0 gast-0.4.0 google-auth-2.22.0 google-auth-oauthlib-1.0.0 google-pasta-0.2.0 grpcio-1.56.0 h5py-3.9.0 imageio-2.31.1 keras-2.13.1 lazy_loader-0.3 lime-0.2.0.1 markdown-3.4.3 pyasn1-modules-0.3.0 requests-2.31.0 requests-oauthlib-1.3.1 rsa-4.9 scikit-image-0.21.0 tensorboard-2.13.0 tensorflow-2.13.0 tensorflow-intel-2.13.0 tifffile-2023.7.10 Note: you may need to restart the kernel to use updated packages.
WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' WARNING: Skipping c:\Users\gvcer\Documents\Python\env\Lib\site-packages\pyparsing-3.1.0.dist-info due to invalid metadata entry 'name' [notice] A new release of pip is available: 23.1.2 -> 23.2 [notice] To update, run: python.exe -m pip install --upgrade pip
Passo 2: Importação das bibliotecas necessárias
Importe as bibliotecas que vamos usar:
import numpy as np
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image
from lime import lime_image
from skimage.io import imread
import matplotlib.pyplot as plt
c:\Users\gvcer\Documents\Python\env\Lib\site-packages\tqdm\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html from .autonotebook import tqdm as notebook_tqdm
Passo 3: Carregar o modelo
Carregamos o modelo que queremos explicar. Para este exemplo, usamos o modelo VGG16 pré-treinado do Keras.
model = VGG16(weights='imagenet', include_top=True)
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5 553467096/553467096 [==============================] - 20s 0us/step
Passo 4: Carregar e pré-processar a imagem
Aqui, carregamos a imagem que queremos classificar e pré-processamos ela para uso com o modelo VGG16.
def load_image(img_path):
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
return x
img = load_image('cat100.jpg')
Passo 5: Fazer uma previsão com o modelo
Agora, fazemos uma previsão usando o modelo:
preds = model.predict(img)
1/1 [==============================] - 3s 3s/step 1/1 [==============================] - 3s 3s/step
Passo 6: Criar um explicador LIME
Aqui, criamos um explicador LIME e usamo-lo para obter uma explicação para a classificação da nossa imagem:
explainer = lime_image.LimeImageExplainer()
explanation = explainer.explain_instance(img[0], model.predict, top_labels=5, hide_color=0, num_samples=1000)
0%| | 0/1000 [00:00<?, ?it/s]
1/1 [==============================] - 1s 1s/step
1%| | 10/1000 [00:01<01:49, 9.08it/s]
1/1 [==============================] - 1s 972ms/step
2%|▏ | 20/1000 [00:02<01:47, 9.13it/s]
1/1 [==============================] - 1s 1s/step
3%|▎ | 30/1000 [00:03<02:06, 7.67it/s]
1/1 [==============================] - 2s 2s/step
4%|▍ | 40/1000 [00:05<02:29, 6.40it/s]
1/1 [==============================] - 2s 2s/step
5%|▌ | 50/1000 [00:07<02:42, 5.85it/s]
1/1 [==============================] - 2s 2s/step
6%|▌ | 60/1000 [00:09<02:51, 5.48it/s]
1/1 [==============================] - 2s 2s/step
7%|▋ | 70/1000 [00:11<02:53, 5.38it/s]
1/1 [==============================] - 2s 2s/step
8%|▊ | 80/1000 [00:13<02:51, 5.36it/s]
1/1 [==============================] - 2s 2s/step
9%|▉ | 90/1000 [00:15<02:53, 5.24it/s]
1/1 [==============================] - 2s 2s/step
10%|█ | 100/1000 [00:17<02:50, 5.26it/s]
1/1 [==============================] - 2s 2s/step
12%|█▏ | 119/1000 [00:19<02:03, 7.15it/s]
1/1 [==============================] - 2s 2s/step
12%|█▏ | 122/1000 [00:21<02:53, 5.07it/s]
1/1 [==============================] - 2s 2s/step
13%|█▎ | 130/1000 [00:23<03:02, 4.78it/s]
1/1 [==============================] - 2s 2s/step
14%|█▍ | 140/1000 [00:25<03:02, 4.71it/s]
1/1 [==============================] - 2s 2s/step
15%|█▌ | 150/1000 [00:27<03:04, 4.60it/s]
1/1 [==============================] - 2s 2s/step
16%|█▌ | 160/1000 [00:29<02:58, 4.72it/s]
1/1 [==============================] - 2s 2s/step
17%|█▋ | 170/1000 [00:31<02:55, 4.74it/s]
1/1 [==============================] - 2s 2s/step
18%|█▊ | 180/1000 [00:33<02:50, 4.81it/s]
1/1 [==============================] - 2s 2s/step
19%|█▉ | 190/1000 [00:35<02:46, 4.86it/s]
1/1 [==============================] - 2s 2s/step
20%|██ | 200/1000 [00:37<02:47, 4.79it/s]
1/1 [==============================] - 2s 2s/step
21%|██ | 210/1000 [00:39<02:44, 4.80it/s]
1/1 [==============================] - 2s 2s/step
23%|██▎ | 229/1000 [00:42<02:01, 6.33it/s]
1/1 [==============================] - 2s 2s/step
23%|██▎ | 232/1000 [00:44<02:46, 4.61it/s]
1/1 [==============================] - 2s 2s/step
24%|██▍ | 240/1000 [00:46<02:52, 4.40it/s]
1/1 [==============================] - 2s 2s/step
25%|██▌ | 250/1000 [00:48<02:43, 4.58it/s]
1/1 [==============================] - 2s 2s/step
26%|██▌ | 260/1000 [00:50<02:39, 4.63it/s]
1/1 [==============================] - 2s 2s/step
27%|██▋ | 270/1000 [00:52<02:33, 4.76it/s]
1/1 [==============================] - 2s 2s/step
28%|██▊ | 280/1000 [00:54<02:29, 4.81it/s]
1/1 [==============================] - 2s 2s/step
30%|██▉ | 299/1000 [00:56<01:47, 6.51it/s]
1/1 [==============================] - 2s 2s/step
30%|███ | 303/1000 [00:58<02:25, 4.80it/s]
1/1 [==============================] - 2s 2s/step
32%|███▏ | 319/1000 [01:00<01:46, 6.41it/s]
1/1 [==============================] - 2s 2s/step
32%|███▏ | 323/1000 [01:02<02:26, 4.61it/s]
1/1 [==============================] - 2s 2s/step
33%|███▎ | 330/1000 [01:05<02:46, 4.02it/s]
1/1 [==============================] - 2s 2s/step
34%|███▍ | 340/1000 [01:07<02:31, 4.35it/s]
1/1 [==============================] - 2s 2s/step
35%|███▌ | 350/1000 [01:09<02:24, 4.49it/s]
1/1 [==============================] - 2s 2s/step
36%|███▌ | 360/1000 [01:11<02:15, 4.71it/s]
1/1 [==============================] - 2s 2s/step
37%|███▋ | 370/1000 [01:13<02:12, 4.74it/s]
1/1 [==============================] - 2s 2s/step
38%|███▊ | 380/1000 [01:15<02:08, 4.81it/s]
1/1 [==============================] - 2s 2s/step
40%|███▉ | 399/1000 [01:17<01:31, 6.58it/s]
1/1 [==============================] - 2s 2s/step
40%|████ | 403/1000 [01:19<02:00, 4.97it/s]
1/1 [==============================] - 2s 2s/step
41%|████ | 410/1000 [01:21<02:10, 4.51it/s]
1/1 [==============================] - 2s 2s/step
42%|████▏ | 420/1000 [01:23<02:04, 4.64it/s]
1/1 [==============================] - 2s 2s/step
43%|████▎ | 430/1000 [01:25<01:58, 4.80it/s]
1/1 [==============================] - 2s 2s/step
44%|████▍ | 440/1000 [01:27<01:56, 4.82it/s]
1/1 [==============================] - 2s 2s/step
45%|████▌ | 450/1000 [01:29<01:52, 4.88it/s]
1/1 [==============================] - 2s 2s/step
47%|████▋ | 469/1000 [01:31<01:19, 6.64it/s]
1/1 [==============================] - 2s 2s/step
47%|████▋ | 473/1000 [01:33<01:46, 4.93it/s]
1/1 [==============================] - 2s 2s/step
48%|████▊ | 480/1000 [01:35<01:58, 4.40it/s]
1/1 [==============================] - 2s 2s/step
50%|████▉ | 499/1000 [01:38<01:20, 6.21it/s]
1/1 [==============================] - 2s 2s/step
50%|█████ | 503/1000 [01:40<01:52, 4.44it/s]
1/1 [==============================] - 2s 2s/step
51%|█████ | 510/1000 [01:42<01:59, 4.11it/s]
1/1 [==============================] - 2s 2s/step
52%|█████▏ | 520/1000 [01:44<01:49, 4.37it/s]
1/1 [==============================] - 2s 2s/step
53%|█████▎ | 530/1000 [01:46<01:42, 4.59it/s]
1/1 [==============================] - 2s 2s/step
54%|█████▍ | 540/1000 [01:48<01:36, 4.77it/s]
1/1 [==============================] - 2s 2s/step
55%|█████▌ | 550/1000 [01:50<01:32, 4.86it/s]
1/1 [==============================] - 2s 2s/step
57%|█████▋ | 568/1000 [01:52<01:06, 6.49it/s]
1/1 [==============================] - 2s 2s/step
57%|█████▋ | 571/1000 [01:54<01:33, 4.58it/s]
1/1 [==============================] - 2s 2s/step
58%|█████▊ | 580/1000 [01:56<01:30, 4.65it/s]
1/1 [==============================] - 2s 2s/step
59%|█████▉ | 590/1000 [01:58<01:29, 4.59it/s]
1/1 [==============================] - 2s 2s/step
60%|██████ | 600/1000 [02:00<01:28, 4.54it/s]
1/1 [==============================] - 2s 2s/step
62%|██████▏ | 619/1000 [02:03<01:01, 6.23it/s]
1/1 [==============================] - 2s 2s/step
62%|██████▏ | 623/1000 [02:05<01:21, 4.65it/s]
1/1 [==============================] - 2s 2s/step
63%|██████▎ | 630/1000 [02:06<01:26, 4.28it/s]
1/1 [==============================] - 2s 2s/step
64%|██████▍ | 640/1000 [02:09<01:20, 4.49it/s]
1/1 [==============================] - 2s 2s/step
65%|██████▌ | 650/1000 [02:11<01:14, 4.67it/s]
1/1 [==============================] - 2s 2s/step
66%|██████▌ | 660/1000 [02:13<01:11, 4.78it/s]
1/1 [==============================] - 2s 2s/step
67%|██████▋ | 670/1000 [02:15<01:08, 4.83it/s]
1/1 [==============================] - 2s 2s/step
68%|██████▊ | 680/1000 [02:17<01:05, 4.88it/s]
1/1 [==============================] - 2s 2s/step
69%|██████▉ | 690/1000 [02:18<01:02, 4.98it/s]
1/1 [==============================] - 2s 2s/step
70%|███████ | 700/1000 [02:21<01:00, 4.92it/s]
1/1 [==============================] - 2s 2s/step
71%|███████ | 710/1000 [02:22<00:58, 4.98it/s]
1/1 [==============================] - 2s 2s/step
72%|███████▏ | 720/1000 [02:25<00:57, 4.87it/s]
1/1 [==============================] - 2s 2s/step
73%|███████▎ | 730/1000 [02:27<00:56, 4.76it/s]
1/1 [==============================] - 2s 2s/step
74%|███████▍ | 740/1000 [02:29<00:55, 4.72it/s]
1/1 [==============================] - 2s 2s/step
75%|███████▌ | 750/1000 [02:31<00:51, 4.89it/s]
1/1 [==============================] - 2s 2s/step
76%|███████▌ | 760/1000 [02:33<00:49, 4.85it/s]
1/1 [==============================] - 2s 2s/step
77%|███████▋ | 770/1000 [02:35<00:47, 4.84it/s]
1/1 [==============================] - 2s 2s/step
78%|███████▊ | 780/1000 [02:37<00:45, 4.84it/s]
1/1 [==============================] - 2s 2s/step
79%|███████▉ | 790/1000 [02:39<00:43, 4.88it/s]
1/1 [==============================] - 2s 2s/step
80%|████████ | 800/1000 [02:41<00:40, 4.88it/s]
1/1 [==============================] - 2s 2s/step
81%|████████ | 810/1000 [02:43<00:38, 4.89it/s]
1/1 [==============================] - 2s 2s/step
82%|████████▏ | 820/1000 [02:45<00:36, 4.94it/s]
1/1 [==============================] - 2s 2s/step
84%|████████▎ | 837/1000 [02:47<00:25, 6.40it/s]
1/1 [==============================] - 2s 2s/step
84%|████████▍ | 840/1000 [02:49<00:34, 4.63it/s]
1/1 [==============================] - 2s 2s/step
85%|████████▌ | 850/1000 [02:51<00:31, 4.78it/s]
1/1 [==============================] - 2s 2s/step
87%|████████▋ | 868/1000 [02:53<00:20, 6.42it/s]
1/1 [==============================] - 2s 2s/step
87%|████████▋ | 871/1000 [02:55<00:28, 4.49it/s]
1/1 [==============================] - 2s 2s/step
88%|████████▊ | 880/1000 [02:57<00:26, 4.50it/s]
1/1 [==============================] - 2s 2s/step
90%|████████▉ | 899/1000 [03:00<00:15, 6.57it/s]
1/1 [==============================] - 2s 2s/step
90%|█████████ | 903/1000 [03:02<00:20, 4.66it/s]
1/1 [==============================] - 2s 2s/step
91%|█████████ | 910/1000 [03:04<00:21, 4.26it/s]
1/1 [==============================] - 2s 2s/step
92%|█████████▏| 920/1000 [03:06<00:17, 4.52it/s]
1/1 [==============================] - 2s 2s/step
93%|█████████▎| 930/1000 [03:08<00:14, 4.71it/s]
1/1 [==============================] - 2s 2s/step
94%|█████████▍| 940/1000 [03:10<00:12, 4.74it/s]
1/1 [==============================] - 2s 2s/step
95%|█████████▌| 950/1000 [03:12<00:10, 4.77it/s]
1/1 [==============================] - 2s 2s/step
96%|█████████▌| 960/1000 [03:14<00:08, 4.73it/s]
1/1 [==============================] - 2s 2s/step
98%|█████████▊| 978/1000 [03:16<00:03, 6.05it/s]
1/1 [==============================] - 2s 2s/step
99%|█████████▉| 989/1000 [03:19<00:01, 5.69it/s]
1/1 [==============================] - 3s 3s/step
99%|█████████▉| 993/1000 [03:22<00:01, 3.68it/s]
1/1 [==============================] - 2s 2s/step
100%|██████████| 1000/1000 [03:24<00:00, 4.88it/s]
Passo 7: Visualizar a explicação
Por fim, visualizamos a explicação. Isso vai criar um mapa de calor mostrando quais partes da imagem foram mais importantes para a classificação:
from skimage.segmentation import mark_boundaries
temp, mask = explanation.get_image_and_mask(explanation.top_labels[0], positive_only=True, num_features=5, hide_rest=True)
plt.imshow(mark_boundaries(temp / 2 + 0.5, mask))
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
<matplotlib.image.AxesImage at 0x1b1ac2e5850>
Passo 8: Decodificar as previsões
Para ver quais objetos o modelo acha que são mais prováveis, podemos decodificar as previsões:
print('Predicted:', decode_predictions(preds, top=3)[0])
Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json
35363/35363 [==============================] - 0s 1us/step
Predicted: [('n02124075', 'Egyptian_cat', 0.38070077), ('n02123045', 'tabby', 0.28539503), ('n02123159', 'tiger_cat', 0.13022758)]