tf.compat.v1.nn.depthwise_conv2d
Свёртка по глубине 2-D.
tf.compat.v1.nn.depthwise_conv2d(
input,
filter,
strides,
padding,
rate=None,
name=None,
data_format=None,
dilations=None
)
Принимая 4-мерный тензор входных данных ('NHWC' или 'NCHW' форматы данных) и тензор фильтра формы [filter_height, filter_width, in_channels, channel_multiplier] содержащий in_channels свёрочных фильтров глубиной 1, depthwise_conv2d применяет разные фильтры к каждому каналу входных данных (расширяя от 1 канала до channel_multiplier каналов для каждого), затем конкатенирует результаты вместе. Выходной тензор имеет in_channels * channel_multiplier каналов.
Подробно, с форматом NHWC по умолчанию,
output[b, i, j, k * channel_multiplier + q] = sum_{di, dj}
filter[di, dj, k, q] * input[b, strides[1] * i + rate[0] * di,
strides[2] * j + rate[1] * dj, k]
Должно выполняться условие strides[0] = strides[3] = 1. В наиболее распространённом случае одинаковых горизонтальных и вертикальных шагов, strides = [1, stride, stride, 1]. Если любое значение в rate больше 1, мы выполняем свёртку с пропусками (atrous), в этом случае все значения в тензоре strides должны быть равны 1.
Пример использования:
x = np.array([
[1., 2.],
[3., 4.],
[5., 6.]
], dtype=np.float32).reshape((1, 3, 2, 1))
kernel = np.array([
[1., 2.],
[3., 4]
], dtype=np.float32).reshape((2, 1, 1, 2))
tf.compat.v1.nn.depthwise_conv2d(x, kernel, strides=[1, 1, 1, 1],
padding='VALID').numpy()
array([[[[10., 14.],
[14., 20.]],
[[18., 26.],
[22., 32.]]]], dtype=float32)
tf.compat.v1.nn.depthwise_conv2d(x, kernel, strides=[1, 1, 1, 1],
padding=[[0, 0], [1, 0], [1, 0], [0, 0]]
).numpy()
array([[[[ 0., 0.],
[ 3., 4.],
[ 6., 8.]],
[[ 0., 0.],
[10., 14.],
[14., 20.]],
[[ 0., 0.],
[18., 26.],
[22., 32.]]]], dtype=float32)
| Аргументы | |
|---|---|
input | 4-мерный с формой согласно data_format. |
filter | 4-мерный с формой [filter_height, filter_width, in_channels, channel_multiplier]. |
strides | 1-мерный массив размера 4. Шаг скользящего окна для каждой размерности input. |
padding | Управляет тем, как заполнить изображение перед применением свёртки. Может быть строкой "SAME" или "VALID", указывающей тип алгоритма заполнения, или списком, указывающим явные заполнения в начале и конце каждой размерности. Когда используется явное заполнение и data_format — "NHWC", это должно быть в форме [[0, 0], [pad_top, pad_bottom], [pad_left, pad_right], [0, 0]]. Когда используется явное заполнение и data_format — "NCHW", это должно быть в форме [[0, 0], [0, 0], [pad_top, pad_bottom], [pad_left, pad_right]]. |
rate | 1-мерный массив размера 2. Скорость пропуска в котором мы выбираем значения входных данных по размерностям height и width в свёртке с пропусками. Если она больше 1, то все значения шагов должны быть 1. |
name | Имя этой операции (необязательно). |
data_format | Формат данных для входных данных. Либо "NHWC" (по умолчанию), либо "NCHW". |
dilations | Псевдоним для rate. |
| Возвращаемое значение | |
|---|---|
4-мерный Tensor с формой согласно data_format. Например, для формата "NHWC", форма — [batch, out_height, out_width, in_channels * channel_multiplier]. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/compat/v1/nn/depthwise_conv2d