Spec-Zone.ru › TensorFlow 2.9

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 Tensor.
begin Tensor. Должен быть одного из следующих типов: int16, int32, int64. begin[k] указывает смещение в k-й спецификации диапазона. Точное измерение, которому это соответствует, определяется контекстом. Значения за пределами границ будут молча ограничены. Если k-й бит в begin_mask равен 1, то begin[k] игнорируется, и вместо этого используется весь диапазон соответствующего измерения. Отрицательные значения приводят к индексированию с самого большого элемента, например, если foo==[1,2,3] то foo[-1]==3
end Tensor. Должен иметь тот же тип, что и begin. end[i] подобен begin, за исключением того, что end_mask используется для определения полных диапазонов.
strides 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 Имя операции (необязательно).
Возвращаемое значение
Tensor. Имеет тот же тип, что и input.

© 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/raw_ops/StridedSlice

Spec-Zone.ru

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