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

Функция nn.separable_conv2d

Функция nn.separable_conv2d применяет к входному тензору двумерную разделяемую свертку. Такая свертка выполняется в два этапа: сначала depthwise-свертка (каждый входной канал обрабатывается своим фильтром), затем pointwise-свертка (смешивание каналов сверткой 1×1). Первым параметром передается входной тензор, вторым - тензор depthwise-ядер, третьим - тензор pointwise-ядер. Четвертым параметром указываются шаги (strides), пятым - тип дополнения (padding). Дополнительно можно задать формат данных (data_format) и коэффициент расширения (dilations).

Синтаксис

tf.nn.separable_conv2d( input, depthwise_filter, pointwise_filter, strides, padding, data_format=None, dilations=None, name=None )

Пример

Давайте создадим входной тензор с одним изображением размером 5×5 и тремя каналами, а затем применим разделяемую свертку с двумя выходными каналами:

import tensorflow as tf t = tf.constant([[[[1.0], [2.0], [3.0], [4.0], [5.0]], [[1.0], [2.0], [3.0], [4.0], [5.0]], [[1.0], [2.0], [3.0], [4.0], [5.0]], [[1.0], [2.0], [3.0], [4.0], [5.0]], [[1.0], [2.0], [3.0], [4.0], [5.0]]]]) depthwise = tf.constant([[[[1.0]]], [[[1.0]]], [[[1.0]]]]) pointwise = tf.constant([[[[1.0], [2.0]]]]) res = tf.nn.separable_conv2d( t, depthwise, pointwise, strides=[1, 1, 1, 1], padding='VALID' ) print(res)

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

tf.Tensor( [[[[ 3.] [ 6.]] [[ 6.] [12.]] [[ 9.] [18.]] [[12.] [24.]]]], shape=(1, 4, 4, 2), dtype=float32)

Пример

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

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]]]]) depthwise = tf.constant([[[[1.0]]], [[[1.0]]], [[[1.0]]]]) pointwise = tf.constant([[[[1.0], [1.0]]]]) res = tf.nn.separable_conv2d( t, depthwise, pointwise, strides=[1, 1, 1, 1], padding='SAME' ) print(res.shape)

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

(1, 3, 3, 2)

Пример

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

import tensorflow as tf t = tf.constant([[[[1.0], [2.0], [3.0], [4.0]], [[1.0], [2.0], [3.0], [4.0]], [[1.0], [2.0], [3.0], [4.0]], [[1.0], [2.0], [3.0], [4.0]]]]) depthwise = tf.constant([[[[1.0]]], [[[1.0]]], [[[1.0]]]]) pointwise = tf.constant([[[[1.0]]]]) res = tf.nn.separable_conv2d( t, depthwise, pointwise, strides=[1, 2, 2, 1], padding='VALID' ) print(res.shape)

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

(1, 2, 2, 1)

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

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