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 следует использовать Tensor.getitem или Variable.getitem Python, а не эту операцию напрямую.

Цель этой операции — создать новый тензор, содержащий подмножество элементов из 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 означает, что начальное значение нужно игнорировать и вместо него использовать максимально возможный интервал. Во время выполнения 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 означает, что позиция номер i является многоточием. Может быть установлен не более чем один бит. Если ellipsis_mask == 0, предоставляется неявная маска многоточия 1 << (m+1). Это означает, что foo[3:5] == foo[3:5, ...]. Многоточие неявно создаёт столько спецификаций диапазона, сколько необходимо для полного описания среза по каждому измерению. Например, для четырёхмерного тензора foo срез foo[2, ..., 5:8] подразумевает foo[2, :, :, 5:8].
new_axis_mask Необязательный объект int. Значение по умолчанию — 0. Битовая маска, в которой установленный бит i означает, что спецификация номер 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