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

Класс SeparableConv2D

Класс SeparableConv2D создает слой разделяемой двумерной свертки. В отличие от обычной свертки, разделяемая свертка выполняет две операции: сначала depthwise-свертку (каждый входной канал обрабатывается отдельным ядром), затем pointwise-свертку (смешивание каналов ядром 1×1). Первым параметром слой принимает количество фильтров filters, вторым - размер ядра kernel_size. Также можно указать шаг strides, тип паддинга padding, функцию активации activation и другие параметры.

Синтаксис

tf.keras.layers.SeparableConv2D( filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), groups=1, activation=None, use_bias=True, depth_multiplier=1, depthwise_initializer='glorot_uniform', pointwise_initializer='glorot_uniform', bias_initializer='zeros', depthwise_regularizer=None, pointwise_regularizer=None, bias_regularizer=None, activity_regularizer=None, depthwise_constraint=None, pointwise_constraint=None, bias_constraint=None )

Пример

Давайте создадим слой разделяемой свертки с 32 фильтрами и ядром 3×3, а затем применим его к входному тензору:

import tensorflow as tf tf.random.set_seed(0) layer = tf.keras.layers.SeparableConv2D( filters=32, kernel_size=(3, 3), activation='relu' ) t = tf.random.normal((1, 28, 28, 3)) res = layer(t) print(res.shape)

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

(1, 26, 26, 32)

Пример

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

import tensorflow as tf tf.random.set_seed(0) layer = tf.keras.layers.SeparableConv2D( filters=16, kernel_size=(3, 3), strides=(2, 2), padding='same' ) t = tf.random.normal((1, 28, 28, 3)) res = layer(t) print(res.shape)

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

(1, 14, 14, 16)

Пример

Давайте используем слой внутри модели Sequential для обработки изображений:

import tensorflow as tf tf.random.set_seed(0) model = tf.keras.Sequential([ tf.keras.layers.Input(shape=(28, 28, 3)), tf.keras.layers.SeparableConv2D( filters=32, kernel_size=(3, 3), activation='relu' ), tf.keras.layers.GlobalAveragePooling2D(), tf.keras.layers.Dense(10, activation='softmax') ]) t = tf.random.normal((1, 28, 28, 3)) res = model(t) print(res.shape)

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

(1, 10)

Пример

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

import tensorflow as tf tf.random.set_seed(0) layer = tf.keras.layers.SeparableConv2D( filters=32, kernel_size=(3, 3), depth_multiplier=2, activation='relu' ) t = tf.random.normal((1, 28, 28, 3)) res = layer(t) print(res.shape)

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

(1, 26, 26, 32)

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

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