Spec-Zone.ru › TensorFlow 2.3

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. Должен быть одного из следующих типов: 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.

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

Spec-Zone.ru

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