tf.compat.v1.nn.convolution
Вычисляет суммы N-D-свёрток (фактически взаимную корреляцию).
tf.compat.v1.nn.convolution(
input,
filter,
padding,
strides=None,
dilation_rate=None,
name=None,
data_format=None,
filters=None,
dilations=None
)
Также поддерживается изменение шага выходных данных с помощью необязательного параметра strides или атрусная свёртка (также известная как свёртка с отверстиями или разреженная свёртка; название происходит от французского слова «trous», означающего «отверстия» по-английски) с помощью необязательного параметра dilation_rate. Однако в настоящее время изменение шага выходных данных не поддерживается для атрусных свёрток.
В частности, если data_format не начинается с «NC», то для тензора input ранга (N+2) с формой
[num_batches, input_spatial_shape[0], ..., input_spatial_shape[N-1], num_input_channels],
тензора filter ранга (N+2) с формой
[spatial_filter_shape[0], ..., spatial_filter_shape[N-1], num_input_channels, num_output_channels],
необязательного тензора dilation_rate формы N (по умолчанию [1]*N), задающего коэффициент увеличения фильтра/уменьшения входных данных, и необязательного списка из N значений strides (по умолчанию [1]*N) для каждой пространственной позиции N-D выходных данных (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-D внутри фильтра. Здесь padded_input получается дополнением входных данных нулями с использованием эффективной пространственной формы фильтра (spatial_filter_shape-1) * dilation_rate + 1 и шага выходных данных strides.
Если data_format начинается с "NC", то input и выходные данные (но не filter) просто транспонируются следующим образом:
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». |
filter | Объект 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. |
dilation_rate | Необязательный параметр. Последовательность из 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», где Если 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 | Если глубина входных или выходных данных не соответствует форме filter, если значение 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/compat/v1/nn/convolution