Свёртка картинки в TensorFlow
Свёртка на картинке строит
новые карты признаков: фильтр
скользит по высоте и ширине и
считает сумму произведений в каждом
окне. В Keras для плоских картинок
её задают классом Conv2D.
При создании указывают число
фильтров и размер окна.
Вход класса Conv2D - партия
в порядке NHWC. Возьмём одну
серую карту 2×2, два
фильтра и окно 2×2 без
смещения. Выведем ответ и его
форму:
import tensorflow as tf
tf.keras.utils.set_random_seed(0)
images = tf.constant([[[[1.0], [2.0]],
[[3.0], [4.0]]]])
layer = tf.keras.layers.Conv2D(2, 2, use_bias=False)
out = layer(images)
print(out)
print(out.shape)
# выведет (1, 1, 1, 2)
Высота и ширина на выходе могут стать меньше, чем на входе: окно должно целиком помещаться на карте. Число каналов совпадает с числом фильтров. Сравним форму до и после:
import tensorflow as tf
images = tf.constant([[[[1.0], [2.0]],
[[3.0], [4.0]]]])
layer = tf.keras.layers.Conv2D(3, 2)
out = layer(images)
print(images.shape)
print(out.shape)
Если задать окно 1×1, размер
по высоте и ширине не меняется,
меняются только каналы:
import tensorflow as tf
images = tf.constant([[[[1.0, 2.0], [3.0, 4.0]]]])
layer = tf.keras.layers.Conv2D(4, 1)
out = layer(images)
print(out.shape)
Соберите партию из одной карты
3×3 с одним каналом из
единиц. Пропустите её через блок
с двумя фильтрами и окном
2×2 и выведите форму
ответа.
Задайте карту 2×2 с двумя
каналами в партии из одного
элемента. Получите из неё три
карты признаков с окном 1×1
и выведите форму результата.
Создайте нулевую партию формы
(1, 4, 4, 1). Примените к
ней блок на пять фильтров с окном
3×3 и выведите форму
выхода.