Spec-Zone.ru › TensorFlow

tf.nn.convolution

Вычисляет суммы N-мерных свёрток (фактически — перекрёстную корреляцию).

tf.nn.convolution(
    input,
    filters,
    strides=None,
    padding='VALID',
    data_format=None,
    dilations=None,
    name=None
)

Используется в блокнотах

Используется в руководствах
  • Масштабируемое сжатие моделей

Также поддерживается выполнение шага выходных данных с помощью необязательного параметра strides или атрусная свёртка (также известная как свёртка с отверстиями или дилатированная свёртка; название происходит от французского слова «trous», означающего «отверстия» по-английски) с помощью необязательного параметра dilations. Однако в настоящее время шаг выходных данных не поддерживается для атрусных свёрток.

В частности, если data_format не начинается с «NC», то для тензора ранга (N+2) input формы

[num_batches, input_spatial_shape[0], ..., input_spatial_shape[N-1], num_input_channels],

тензора ранга (N+2) filters формы

[spatial_filter_shape[0], ..., spatial_filter_shape[N-1], num_input_channels, num_output_channels],

необязательного тензора dilations формы N (по умолчанию [1]*N), задающего коэффициент повышения дискретизации фильтра/понижения дискретизации входных данных, и необязательного списка из N значений strides (по умолчанию [1]*N), для каждой пространственной позиции N-мерного выхода (x[0], ..., x[N-1]) вычисляется:

output[b, x[0], ..., x[N-1], k] =
    sum_{z[0], ..., z[N-1], q}
        filter[z[0], ..., z[N-1], q, k] *
        padded_input[b,
                     x[0]*strides[0] + dilation_rate[0]*z[0],
                     ...,
                     x[N-1]*strides[N-1] + dilation_rate[N-1]*z[N-1],
                     q]

где b — индекс в пакете, k — номер выходного канала, q — номер входного канала, а z — N-мерное пространственное смещение внутри фильтра. Здесь padded_input получается дополнением входных данных нулями с использованием эффективной пространственной формы фильтра (spatial_filter_shape-1) * dilation_rate + 1 и шага выходных данных strides.

Если data_format начинается с "NC", то input и выходные данные (но не filters) просто транспонируются следующим образом:

convolution(input, data_format, **kwargs) =
  tf.transpose(convolution(tf.transpose(input, [0] + range(2,N+2) + [1]),
                           **kwargs),
               [0, N+1] + range(1, N+1))

Требуется, чтобы выполнялось условие 1 <= N <= 3.

Аргументы
input Тензор Tensor размерности (N+2) типа T, формы [batch_size] + input_spatial_shape + [in_channels], если data_format не начинается с «NC» (по умолчанию), или формы [batch_size, in_channels] + input_spatial_shape, если data_format начинается с «NC».
filters Тензор Tensor размерности (N+2) того же типа, что и input, и формы spatial_filter_shape + [in_channels, out_channels].
padding Строка: "VALID" или "SAME". Алгоритм дополнения. "valid" означает отсутствие дополнения. При значении "same" дополнение равномерно добавляется слева/справа или сверху/снизу от входных данных так, чтобы при значении шага 1 высота/ширина выходных данных совпадала с высотой/шириной входных данных. Подробнее см. здесь.
strides Необязательный параметр. Последовательность из N целых чисел >= 1. Задаёт шаг выходных данных. По умолчанию — [1]*N. Если хотя бы одно значение strides больше 1, все значения dilation_rate должны быть равны 1.
dilations Необязательный параметр. Последовательность из N целых чисел >= 1. Задаёт коэффициент повышения дискретизации фильтра/понижения дискретизации входных данных. В литературе этот же параметр иногда называется input stride или dilation. Эффективный размер фильтра, используемый для свёртки, равен spatial_filter_shape + (spatial_filter_shape - 1) * (rate - 1) и получается путём вставки (dilation_rate[i]-1) нулей между соседними элементами исходного фильтра в каждом пространственном измерении i. Если хотя бы одно значение dilation_rate больше 1, все значения strides должны быть равны 1.
name Необязательное имя возвращаемого тензора.
data_format Строка или None. Указывает, является ли размерность каналов input и выходных данных последней (по умолчанию или если data_format не начинается с «NC») или второй (если data_format начинается с «NC»). Для N=1 допустимы значения «NWC» (по умолчанию) и «NCW». Для N=2 допустимы значения «NHWC» (по умолчанию) и «NCHW». Для N=3 допустимы значения «NDHWC» (по умолчанию) и «NCDHW».
Возвращает
Tensor того же типа, что и input, формы
`[batch_size] + output_spatial_shape + [out_channels]`

если data_format равен None или не начинается с «NC», или

`[batch_size, out_channels] + output_spatial_shape`

если data_format начинается с «NC», где output_spatial_shape зависит от значения padding.

Если padding == "SAME": output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])

Если padding == "VALID": output_spatial_shape[i] = ceil((input_spatial_shape[i] - (spatial_filter_shape[i]-1) * dilation_rate[i]) / strides[i]).

Вызывает исключение
ValueError Если глубина входных/выходных данных не соответствует форме filters, если значение padding отличается от "VALID" или "SAME" либо если data_format задан неверно.

© 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/api_docs/python/tf/nn/convolution

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API