РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
731 of 824 menu

Функция nn.conv2d

Функция nn.conv2d применяет операцию свертки к четырехмерному входному тензору. Первым параметром передается входной тензор формы [batch, height, width, channels]. Вторым параметром передается тензор фильтров формы [filter_height, filter_width, in_channels, out_channels]. Третьим параметром задается шаг свертки strides - список из четырех чисел, определяющий сдвиг окна по каждому измерению. Четвертым параметром указывается тип паддинга padding: строка 'SAME' сохраняет пространственные размеры, а 'VALID' уменьшает их без добавления границ. Дополнительно можно передать data_format и dilations.

Синтаксис

tf.nn.conv2d(input, filters, strides, padding, [data_format], [dilations])

Пример

Давайте применим свертку к одному изображению размером 4 на 4 с одним каналом. Используем один фильтр 2 на 2, заполненный единицами:

import tensorflow as tf # input image: [batch, height, width, channels] t = tf.constant([[[[1], [2], [3], [4]], [[5], [6], [7], [8]], [[9], [10], [11], [12]], [[13], [14], [15], [16]]]], dtype=tf.float32) # one filter 2x2 with ones filters = tf.constant([[[[1]], [[1]]], [[[1]], [[1]]]], dtype=tf.float32) res = tf.nn.conv2d(t, filters, strides=[1, 1, 1, 1], padding='VALID') print(res)

Результат выполнения кода:

tf.Tensor( [[[[14.] [18.] [22.]] [[30.] [34.] [38.]] [[46.] [50.] [54.]]]], shape=(1, 3, 3, 1), dtype=float32)

Пример

Давайте сравним режимы паддинга 'VALID' и 'SAME' на одном и том же входе и фильтре:

<+python+> import tensorflow as tf t = tf.constant([[[[1], [2], [3], [4]], [[5], [6], [7], [8]], [[9], [10], [11], [12]], [[13], [14], [15], [16]]]], dtype=tf.float32) filters = tf.constant([[[[1]], [[1]]], [[[1]], [[1]]]], dtype=tf.float32) res_valid = tf.nn.conv2d(t, filters, strides=[1, 1, 1, 1], padding='VALID') res_same = tf.nn.conv2d(t, filters, strides=[1, 1, 1, 1], padding='SAME') print("VALID:", res_valid.shape) print("SAME:", res_same.shape) <-python+>

Результат выполнения кода:

"VALID: (1, 3, 3, 1)" "SAME: (1, 4, 4, 1)"

Пример

Давайте выполним свертку с несколькими выходными каналами. Подадим изображение с тремя каналами и создадим два фильтра размером 3 на 3:

import tensorflow as tf tf.random.set_seed(0) # input: [batch, height, width, channels] t = tf.random.normal([1, 5, 5, 3]) # filters: [filter_height, filter_width, in_channels, out_channels] filters = tf.random.normal([3, 3, 3, 2]) res = tf.nn.conv2d(t, filters, strides=[1, 1, 1, 1], padding='SAME') print(res.shape)

Результат выполнения кода:

(1, 5, 5, 2)

Пример

Давайте применим свертку с шагом 2, чтобы уменьшить пространственные размеры вдвое:

import tensorflow as tf t = tf.constant([[[[1], [2], [3], [4]], [[5], [6], [7], [8]], [[9], [10], [11], [12]], [[13], [14], [15], [16]]]], dtype=tf.float32) filters = tf.constant([[[[1]], [[1]]], [[[1]], [[1]]]], dtype=tf.float32) res = tf.nn.conv2d(t, filters, strides=[1, 2, 2, 1], padding='VALID') print(res.shape)

Результат выполнения кода:

(1, 2, 2, 1)

Смотрите также

  • функцию conv1d,
    которая выполняет одномерную свертку
  • функцию conv3d,
    которая выполняет трехмерную свертку
  • функцию conv2d_transpose,
    которая выполняет транспонированную свертку
  • функцию depthwise_conv2d,
    которая выполняет глубинную свертку
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить