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

Класс DepthwiseConv2D

Класс DepthwiseConv2D выполняет глубинную двумерную свертку над входными данными. В отличие от обычной свертки Conv2D, где каждый фильтр применяется ко всем входным каналам сразу, глубинная свертка применяет отдельный фильтр к каждому каналу независимо. Первым параметром передается размер ядра свертки (например, 3 или кортеж (3, 3)). Параметр strides задает шаг свертки, padding - режим дополнения ('valid' или 'same'), depth_multiplier - множитель числа выходных каналов на каждый входной канал, activation - функцию активации, use_bias - использовать ли смещение.

Синтаксис

tf.keras.layers.DepthwiseConv2D( kernel_size, strides=(1, 1), padding='valid', depth_multiplier=1, activation=None, use_bias=True, depthwise_initializer='glorot_uniform', bias_initializer='zeros' )

Пример

Давайте создадим слой глубинной свертки с ядром 3 и применим его к тензору формы (1, 4, 4, 2):

import tensorflow as tf tf.random.set_seed(0) layer = tf.keras.layers.DepthwiseConv2D(kernel_size=3, padding='same') t = tf.constant([[[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]]]]) res = layer(t) print(res.shape)

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

(1, 4, 4, 2)

Пример

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

import tensorflow as tf tf.random.set_seed(0) layer = tf.keras.layers.DepthwiseConv2D( kernel_size=3, padding='same', depth_multiplier=2 ) t = tf.constant([[[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]]]]) res = layer(t) print(res.shape)

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

(1, 4, 4, 4)

Пример

Давайте создадим модель с глубинной сверткой и функцией активации relu:

import tensorflow as tf tf.random.set_seed(0) model = tf.keras.Sequential([ tf.keras.layers.Input(shape=(4, 4, 2)), tf.keras.layers.DepthwiseConv2D(kernel_size=3, padding='same', activation='relu'), tf.keras.layers.Flatten(), tf.keras.layers.Dense(2) ]) t = tf.constant([[[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]], [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]]]]) res = model(t) print(res.shape)

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

(1, 2)

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

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