Spec-Zone.ru › TensorFlow 2.4

tf.raw_ops.StridedSlice

Возвращает срез со строгими шагами из input.

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

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

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

tf.compat.v1.raw_ops.StridedSlice

tf.raw_ops.StridedSlice(
    input, begin, end, strides, begin_mask=0, end_mask=0, ellipsis_mask=0,
    new_axis_mask=0, shrink_axis_mask=0, name=None
)

Обратите внимание, что большинство пользователей Python захотят использовать Python Tensor.getitem или Variable.getitem, а не этот оператор напрямую.

Цель этого оператора — создать новый тензор с подмножеством элементов из n-мерного тензора input. Подмножество выбирается с помощью последовательности m спецификаций диапазона разреженных значений, закодированных в аргументах этой функции. Обратите внимание, что в некоторых случаях m может быть равно n, но это не обязательно.

  • Эллипсис (...). Эллипсисы используются для подразумевания нуля или более измерений полной размерности выбора и создаются с помощью ellipsis_mask. Например, foo[...] — это срез-тождество.

  • Новое измерение. Это используется для вставки нового измерения с формой=1 и создается с помощью new_axis_mask. Например, foo[:, ...] где foo имеет форму (3, 4) создает тензор (1, 3, 4).

  • Диапазон begin:end:stride. Это используется для указания количества выборов из данного измерения. stride может быть любым целым числом, но не 0. begin — это целое число, представляющее индекс первого выбираемого значения, а end — индекс последнего выбираемого значения. Количество выбираемых значений в каждом измерении равно end - begin если stride > 0 и begin - end если stride < 0. begin и end могут быть отрицательными, где -1 — это последний элемент, а -2 — предпоследний. begin_mask управляет заменой явно заданного begin неявным эффективным значением 0 если stride > 0 и -1 если stride < 0. end_mask аналогичен, но вычисляет число, необходимое для создания наибольшего открытого интервала. Например, для тензора формы (3,) foo[:] эффективные begin и end являются 0 и 3. Не предполагайте, что это эквивалентно foo[0:-1], которое имеет эффективные begin и end соответственно 0 и 2. Другой пример — foo[-2::-1], который инвертирует первое измерение тензора, отбрасывая последние два (в исходном порядке элементов). Например, foo = [1,2,3,4]; foo[-2::-1] — это [4,3].

  • Один индекс. Это используется для сохранения только элементов, имеющих данный индекс. Например, (foo[2, :] на тензоре формы (5,6) создаёт тензор формы (6,) . Это закодировано в begin и end и shrink_axis_mask.

Каждая концептуальная спецификация диапазона кодируется в аргументе оператора. Это кодирование лучше всего понять, рассмотрев нетривиальный пример. В частности, foo[1, 2:4, None, ..., :-3:-1, :] будет закодировано как

begin = [1, 2, x, x, 0, x] # x denotes don't care (usually 0)
end = [2, 4, x, x, -3, x]
strides = [1, 1, x, x, -1, 1]
begin_mask = 1<<4 | 1<<5 = 48
end_mask = 1<<5 = 32
ellipsis_mask = 1<<3 = 8
new_axis_mask = 1<<2 = 4
shrink_axis_mask = 1<<0 = 1

В этом случае, если foo.shape равняется (5, 5, 5, 5, 5, 5), конечная форма среза станет (2, 1, 5, 5, 2, 5). Давайте шаг за шагом пройдёмся по каждой спецификации аргумента.

  1. Первый аргумент в примере среза преобразуется в begin = 1 и end = begin + 1 = 2. Для того, чтобы отличить от исходной спецификации 2:4, также устанавливается соответствующий бит в shrink_axis_mask.

  2. 2:4 вносит значения 2, 4, 1 для начала, конца и шага. Все маски имеют нулевые биты.

  3. None — синоним для tf.newaxis. Это означает вставка измерения размера 1 в конечную форму. Для начала, конца и шага вносятся фиктивные значения, а бит new_axis_mask устанавливается.

  4. ... берёт полные диапазоны из необходимого количества измерений для полного определения среза для каждого измерения входной формы.

  5. :-3:-1 демонстрирует использование отрицательных индексов. Отрицательный индекс i по отношению к измерению с формой s преобразуется в положительный индекс s + i. Итак, -1 становится s-1 (т.е. последний элемент). Это преобразование выполняется внутри, поэтому для начала, конца и шага задаются значения x, -3 и -1 соответственно. Соответствующий бит begin_mask устанавливается для указания того, что диапазон начала — это полный диапазон (игнорируя x).

  6. : указывает на выбор всего содержимого соответствующего измерения. Это эквивалентно :: или 0::1. Значения начала, конца и шага принимают значения 0, 0 и 1 соответственно. Соответствующие биты в begin_mask и end_mask также устанавливаются.

Требования: 0 != strides[i] for i in [0, m) ellipsis_mask must be a power of two (only one ellipsis)

Аргументы
input A Tensor.
begin A Tensor. Должен быть одного из следующих типов: int32, int64. begin[k] задаёт смещение в k-й спецификации диапазона. Точное измерение, которому это соответствует, будет определено контекстом. Значения вне диапазона будут безмолвно ограничены. Если k-й бит begin_mask равен 1, тогда begin[k] игнорируется, и вместо этого используется полный диапазон соответствующего измерения. Отрицательные значения означают индексирование с самого высокого элемента, например, если foo==[1,2,3] то foo[-1]==3.
end A Tensor. Должен иметь тот же тип, что и begin. end[i] похож на begin, за исключением того, что end_mask используется для определения полных диапазонов.
strides A Tensor. Должен иметь тот же тип, что и begin. strides[i] задаёт приращение в i-й спецификации после извлечения заданного элемента. Отрицательные индексы инвертируют исходный порядок. Значения вне диапазона ограничиваются [0,dim[i]) if slice[i]>0 или [-1,dim[i]-1] if slice[i] < 0
begin_mask Необязательная int. По умолчанию 0. Маска битов, где бит i равен 1 означает игнорирование значения начала и использование вместо этого наибольшего возможного интервала. Во время выполнения begin[i] будет заменено на [0, n-1) если stride[i] > 0 или [-1, n-1] если stride[i] < 0
end_mask Необязательная int. По умолчанию 0. Аналогично begin_mask
ellipsis_mask Необязательная int. По умолчанию 0. Маска битов, где бит i равен 1 означает, что i-я позиция на самом деле является эллипсом. Не более одного бита может быть равен 1. Если ellipsis_mask == 0, то предоставляется неявная маска эллипса 1 << (m+1). Это означает, что foo[3:5] == foo[3:5, ...]. Эллипс неявно создаёт столько спецификаций диапазона, сколько необходимо для полного определения диапазона среза для каждого измерения. Например, для 4-мерного тензора foo срез foo[2, ..., 5:8] подразумевает foo[2, :, :, 5:8].
new_axis_mask Необязательная int. По умолчанию 0. Маска битов, где бит i равен 1 означает, что i-я спецификация создаёт новое измерение с формой 1. Например, foo[:4, tf.newaxis, :2] создаст тензор с формой (4, 1, 2)
shrink_axis_mask Необязательная int. По умолчанию 0. Маска битов, где бит i подразумевает, что i-я спецификация должна уменьшить размерность. Начало и конец должны подразумевать срез размером 1 в измерении. Например, в Python можно сделать foo[:, 3, :], что приведёт к тому, что shrink_axis_mask будет равен 2.
name Имя операции (необязательно).
Возвращает
A Tensor. Имеет тот же тип, что и input.

© 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/r2.4/api_docs/python/tf/raw_ops/StridedSlice

Spec-Zone.ru

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