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

Функция nn.depthwise_conv2d

Функция nn.depthwise_conv2d выполняет двумерную глубинную свертку (depthwise convolution). В отличие от обычной свертки, где один фильтр применяется ко всем входным каналам сразу, здесь каждый входной канал обрабатывается своим собственным набором фильтров. Первым параметром функция принимает входной четырехмерный тензор формы [batch, height, width, in_channels]. Вторым параметром передается тензор фильтров формы [filter_height, filter_width, in_channels, depth_multiplier]. Третьим параметром задаются шаги (strides) скольжения окна свертки. Четвертым параметром передается строка padding, принимающая значения 'SAME' или 'VALID'.

Синтаксис

tf.nn.depthwise_conv2d(input, filter, strides, padding, [data_format], [dilations], [name])

Пример

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

import tensorflow as tf t = tf.constant([ [[[1.0], [2.0], [3.0]], [[4.0], [5.0], [6.0]], [[7.0], [8.0], [9.0]]] ]) filter = tf.constant([ [[[1.0]], [[0.0]]], [[[0.0]], [[1.0]]] ]) res = tf.nn.depthwise_conv2d( t, filter, strides=[1, 1, 1, 1], padding='VALID' ) print(res)

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

tf.Tensor( [[[[ 6.] [ 8.]] [[12.] [14.]]]], shape=(1, 2, 2, 1), dtype=float32)

Пример

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

import tensorflow as tf t = tf.constant([ [[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], [[7.0, 8.0], [9.0, 10.0], [11.0, 12.0]], [[13.0, 14.0], [15.0, 16.0], [17.0, 18.0]]] ]) filter = tf.constant([ [[[1.0, 1.0], [0.0, 0.0]], [[0.0, 0.0], [1.0, 1.0]]] ]) filter = tf.reshape(filter, [1, 2, 2, 2]) res = tf.nn.depthwise_conv2d( t, filter, strides=[1, 1, 1, 1], padding='VALID' ) print(res.shape)

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

(1, 2, 2, 4)

Пример

Давайте применим глубинную свертку с padding 'SAME' и шагом 1, чтобы сохранить пространственные размеры:

import tensorflow as tf t = tf.constant([ [[[1.0], [2.0], [3.0]], [[4.0], [5.0], [6.0]], [[7.0], [8.0], [9.0]]] ]) filter = tf.constant([ [[[1.0]], [[1.0]]], [[[1.0]], [[1.0]]] ]) res = tf.nn.depthwise_conv2d( t, filter, strides=[1, 1, 1, 1], padding='SAME' ) print(res)

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

tf.Tensor( [[[[12.] [16.] [ 9.]] [[24.] [28.] [15.]] [[21.] [24.] [13.]]]], shape=(1, 3, 3, 1), dtype=float32)

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

  • функцию conv2d,
    которая выполняет обычную двумерную свертку
  • функцию separable_conv2d,
    которая выполняет разделяемую двумерную свертку
  • функцию atrous_conv2d,
    которая выполняет двумерную свертку с дырами
  • функцию dilation2d,
    которая выполняет двумерную морфологическую дилатацию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить