Шаг 230.
Глубокое обучение на Python. ... . Интерпретация знаний, заключенных в сверточной нейронной сети. Визуализация промежуточных активаций

    На этом шаге мы рассмотрим пример такой визуализации.

    Визуализация промежуточных активаций заключается в отображении карт признаков, которые выводятся разными сверточными и объединяющими слоями в сети в ответ на определенные входные данные (вывод слоя, результат функции активации, часто его называют активацией). Этот прием позволяет увидеть, как входные данные разлагаются на разные фильтры, полученные сетью в процессе обучения. Обычно для визуализации используются карты признаков с тремя измерениями: шириной, высотой и глубиной (каналы цвета). Каналы кодируют относительно независимые признаки, поэтому для визуализации этих карт признаков предпочтительнее строить двумерные изображения для каждого канала в отдельности. Начнем с загрузки модели, сохраненной в шагах, начиная с 209 шага:


from tensorflow import keras

model = keras.models.load_model(
    "convnet_from_scratch_with_augmentation.keras")
model.summary()

Model: "functional_1"
 Layer (type)                     Output Shape                  Param # 

 input_layer_1 (InputLayer)       (None, 180, 180, 3)                 0 
 sequential (Sequential)          (None, 180, 180, 3)                 0 
 rescaling (Rescaling)            (None, 180, 180, 3)                 0 
 conv2d (Conv2D)                  (None, 178, 178, 32)              896 
 max_pooling2d (MaxPooling2D)     (None, 89, 89, 32)                  0 
 conv2d_1 (Conv2D)                (None, 87, 87, 64)             18,496 
 max_pooling2d_1 (MaxPooling2D)   (None, 43, 43, 64)                  0 
 conv2d_2 (Conv2D)                (None, 41, 41, 128)            73,856 
 max_pooling2d_2 (MaxPooling2D)   (None, 20, 20, 128)                 0 
 conv2d_3 (Conv2D)                (None, 18, 18, 256)           295,168 
 max_pooling2d_3 (MaxPooling2D)   (None, 9, 9, 256)                   0 
 conv2d_4 (Conv2D)                (None, 7, 7, 256)             590,080 
 flatten (Flatten)                (None, 12544)                       0 
 dropout (Dropout)                (None, 12544)                       0 
 dense (Dense)                    (None, 1)                      12,545 

 Total params: 1,982,084 (7.56 MB)
 Trainable params: 991,041 (3.78 MB)
 Non-trainable params: 0 (0.00 B)
 Optimizer params: 991,043 (3.78 MB)

    Далее выберем входное изображение кошки, не являющееся частью обучающего набора.


Пример 9.6. Предварительная обработка единственного изображения
from tensorflow import keras
import numpy as np

def get_img_array(img_path, target_size): 
  # Открыть файл с изображением и изменить его размер
  img = keras.utils.load_img( 
      "8000.jpg", target_size=target_size) 
  # Преобразовать изображение в массив NumPy типа 
  # float32 с формой (180, 180, 3)
  array = keras.utils.img_to_array(img) 
  # Добавить измерение для преобразования массива в "пакет" с 
  # единственным образцом. Теперь он имеет форму (1, 180, 180, 3)
  array = np.expand_dims(array, axis=0) 
  return array
  
img_tensor = get_img_array("", target_size=(180, 180))

    Отобразим исходное изображение (рисунок 1).


Пример 9.7. Отображение контрольного изображения
import matplotlib.pyplot as plt

plt.axis("off")
plt.imshow(img_tensor[0].astype("uint8"))
plt.show()


Рис.1. Контрольное изображение кошки

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание