Spec-Zone.ru › TensorFlow

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, то 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/api_docs/python/tf/raw_ops/StridedSlice

Spec-Zone.ru

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