Spec-Zone.ru › TensorFlow 1.15

tf.nn.with_space_to_batch

Просмотреть исходный код на GitHub

Выполняет op над пространственно-блочным представлением input.

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительной информации.

tf.compat.v1.nn.with_space_to_batch, `tf.compat.v2.nn.with_space_to_batch`

tf.nn.with_space_to_batch(
    input, dilation_rate, padding, op, filter_shape=None, spatial_dims=None,
    data_format=None
)

Это эквивалентно преобразованию операций с окнами скользящего счёта в соответствующую операцию «с отверстиями», в которой входные данные выбираются в указанной dilation_rate.

В случае, когда dilation_rate равномерно равно 1, это просто возвращает:

op(input, num_spatial_dims, padding)

В противном случае возвращает:

batch_to_space_nd( op(space_to_batch_nd(input, adjusted_dilation_rate, adjusted_paddings), num_spatial_dims, "VALID") adjusted_dilation_rate, adjusted_crops),

где:

adjusted_dilation_rate — это тензор int64 формы [max(spatial_dims)], adjusted_{paddings,crops} — это тензоры int64 формы [max(spatial_dims), 2]

определяются следующим образом:

Сначала мы определим два тензора int64 paddings и crops формы [num_spatial_dims, 2], основанные на значении padding и пространственных измерениях input:

Если padding = "VALID", то:

paddings, crops = required_space_to_batch_paddings( input_shape[spatial_dims], dilation_rate)

Если padding = "SAME", то:

dilated_filter_shape = filter_shape + (filter_shape - 1) * (dilation_rate - 1)

paddings, crops = required_space_to_batch_paddings( input_shape[spatial_dims], dilation_rate, [(dilated_filter_shape - 1) // 2, dilated_filter_shape - 1 - (dilated_filter_shape - 1) // 2])

Поскольку space_to_batch_nd и batch_to_space_nd предполагают, что пространственные измерения расположены последовательно, начиная со второго измерения, но указанные spatial_dims могут не быть, мы должны скорректировать dilation_rate, paddings и crops для использования с этими операциями. Для данного измерения, если размер блока равен 1, а начальное и конечное значения заполнения и обрезки равны 0, то space_to_batch_nd фактически оставляет это измерение без изменений, что необходимо для измерений, не являющихся частью spatial_dims. Кроме того, space_to_batch_nd и batch_to_space_nd эффективно обрабатывают этот случай для любого количества ведущих и заключительных измерений.

Для 0 <= i < len(spatial_dims), мы присваиваем:

adjusted_dilation_rate[spatial_dims[i] - 1] = dilation_rate[i] adjusted_paddings[spatial_dims[i] - 1, :] = paddings[i, :] adjusted_crops[spatial_dims[i] - 1, :] = crops[i, :]

Все неназначенные значения adjusted_dilation_rate по умолчанию равны 1, а все неназначенные значения adjusted_paddings и adjusted_crops по умолчанию равны 0.

Обратите внимание, что в случае, когда dilation_rate не равномерно 1, указание «VALID» заполнения эквивалентно указанию padding = "SAME" с формой фильтра [1]*N.

Расширенное использование. Обратите внимание на следующую оптимизацию: Последовательность with_space_to_batch операций с одинаковыми (не равномерно 1) параметрами dilation_rate и заполнением «VALID»

net = with_space_to_batch(net, dilation_rate, "VALID", op_1) ... net = with_space_to_batch(net, dilation_rate, "VALID", op_k)

можно объединить в одну with_space_to_batch операцию следующим образом:

def combined_op(converted_input, num_spatial_dims, _): result = op_1(converted_input, num_spatial_dims, "VALID") ... result = op_k(result, num_spatial_dims, "VALID")

net = with_space_to_batch(net, dilation_rate, "VALID", combined_op)

Это устраняет накладные расходы k-1 вызовов space_to_batch_nd и batch_to_space_nd.

Аналогично, последовательность with_space_to_batch операций с одинаковыми (не равномерно 1) параметрами dilation_rate, заполнением «SAME» и нечётными размерами фильтра

net = with_space_to_batch(net, dilation_rate, "SAME", op_1, filter_shape_1) ... net = with_space_to_batch(net, dilation_rate, "SAME", op_k, filter_shape_k)

можно объединить в одну with_space_to_batch операцию следующим образом:

def combined_op(converted_input, num_spatial_dims, _): result = op_1(converted_input, num_spatial_dims, "SAME") ... result = op_k(result, num_spatial_dims, "SAME")

net = with_space_to_batch(net, dilation_rate, "VALID", combined_op)

Аргументы
input Тензор ранга > max(spatial_dims).
dilation_rate Тензор int32 известной формы [num_spatial_dims].
padding Строковая константа, равная "VALID" или "SAME"
op Функция, отображающая (input, num_spatial_dims, padding) -> output
filter_shape Если padding = "SAME", указывает форму ядра свёртки/окна пулинга как целочисленный тензор формы [>=num_spatial_dims]. Если padding = "VALID", filter_shape игнорируется и не нужно указывать.
spatial_dims Монотонно возрастающая последовательность num_spatial_dims целых чисел (которые >= 1), задающих пространственные измерения input и выходных данных. По умолчанию: range(1, num_spatial_dims+1).
data_format Строка или None. Указывает, является ли измерение канала input и выходных данных последним измерением (по умолчанию, или если data_format не начинается с "NC"), или вторым измерением (если data_format начинается с "NC"). Для N=1 допустимые значения — "NWC" (по умолчанию) и "NCW". Для N=2 допустимые значения — "NHWC" (по умолчанию) и "NCHW". Для N=3 допустимые значения — "NDHWC" (по умолчанию) и "NCDHW".
Возвращает
Тензор выходных данных, как описано выше, размеры будут варьироваться в зависимости от предоставленной операции.
Возможные исключения
ValueError если padding недействительно или аргументы несовместимы.
ValueError если spatial_dims недействительны.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/nn/with_space_to_batch

Spec-Zone.ru

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