Вернуть фрагмент с шагом из `input`.
Обратите внимание: большинство пользователей Python захотят использовать Python Tensor.__getitem__
или Variable.__getitem__
а не эту операцию напрямую.
Целью этой операции является создание нового тензора с подмножеством элементов n-мерного «входного» тензора. Подмножество выбирается с использованием последовательности m спецификаций разреженного диапазона, закодированных в аргументах этой функции. Обратите внимание, что в некоторых случаях `m` может быть равно `n`, но это не обязательно. Каждая запись спецификации диапазона может быть одной из следующих:
- Многоточие (...). Эллипсы используются для обозначения нуля или более измерений полноразмерного выделения и создаются с использованием `ellipsis_mask`. Например, `foo[...]` — это срез идентификатора.
- Новая ось. Он используется для вставки нового размера shape=1 и создается с помощью new_axis_mask. Например, `foo[:, ...]`, где `foo` — это форма `(3, 4)`, создаёт тензор `(1, 3, 4)`.
- Диапазон `начало:конец:шаг`. Это используется для указания того, сколько выбрать из данного измерения. `stride` может быть любым целым числом, кроме 0. `begin` — это целое число, которое представляет индекс первого выбираемого значения, а `end` представляет индекс последнего выбираемого значения. В каждом измерении выбрано следующее количество значений: «конец – начало», если «шаг > 0», и «начало — конец», если «шаг < 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 != шагов[i] для i в [0, m)` `ellipsis_mask должна быть степенью двойки (только одно многоточие)`
Вложенные классы
сорт | StridedSlice.Параметры | Дополнительные атрибуты для StridedSlice |
Публичные методы
Выход <Т> | какВывод () Возвращает символический дескриптор тензора. |
статический StridedSlice.Options | BeginMask (Длинная BeginMask) |
static <T, U расширяет число> StridedSlice <T> | |
статический StridedSlice.Options | ellipsisMask (Длинная маска ellipsisMask) |
статический StridedSlice.Options | endMask (Длинная endMask) |
статический StridedSlice.Options | newAxisMask (длинная newAxisMask) |
Выход <Т> | выход () |
статический StridedSlice.Options | ShrinkAxisMask (Длинная ShrinkAxisMask) |
Унаследованные методы
Публичные методы
публичный вывод <T> asOutput ()
Возвращает символический дескриптор тензора.
Входные данные для операций TensorFlow являются выходными данными другой операции TensorFlow. Этот метод используется для получения символического дескриптора, который представляет собой вычисление входных данных.
общедоступный статический StridedSlice.Options BeginMask (Long BeginMask)
Параметры
начатьМаска | битовая маска, где бит i равен 1, означает игнорировать начальное значение и вместо этого использовать максимально возможный интервал. Во время выполнения Begin[i] будет заменен на `[0, n-1)`, если `stride[i] > 0` или `[-1, n-1]`, если `stride[i] < 0` |
---|
public static StridedSlice <T> create (область действия , ввод операнда <T>, начало операнда <U>, конец операнда <U>, шаги операнда <U>, параметры... параметры)
Фабричный метод для создания класса, обертывающего новую операцию StridedSlice.
Параметры
объем | текущий объем |
---|---|
начинать | `begin[k]` задает смещение в спецификации `k`-го диапазона. Точное измерение, которому это соответствует, будет определяться контекстом. Значения, выходящие за пределы, будут автоматически фиксироваться. Если `k`-й бит `begin_mask`, `begin[k]` игнорируется и вместо этого используется полный диапазон соответствующего измерения. Отрицательные значения приводят к тому, что индексация начинается с самого высокого элемента, например, если `foo==[1,2,3]`, то `foo[-1]==3`. |
конец | `end[i]` похож на `begin`, за исключением того, что `end_mask` используется для определения полных диапазонов. |
шаги | `strides[i]` задает приращение в `i`-й спецификации после извлечения данного элемента. Отрицательные индексы изменят первоначальный порядок. Значения Out или диапазона ограничиваются `[0,dim[i]), если срез[i]>0` или `[-1,dim[i]-1], если срез[i] < 0` |
параметры | содержит значения необязательных атрибутов |
Возврат
- новый экземпляр StridedSlice
public static StridedSlice.Options ellipsisMask (Long ellipsisMask)
Параметры
многоточиеМаска | битовая маска, где бит `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]`. |
---|
общедоступный статический StridedSlice.Options endMask (Long endMask)
Параметры
КонечнаяМаска | аналог `begin_mask` |
---|
общедоступный статический StridedSlice.Options newAxisMask (Long newAxisMask)
Параметры
новаяAxisMask | битовая маска, где бит `i` равен 1, означает, что `i`-я спецификация создает новое измерение формы 1. Например, `foo[:4, tf.newaxis, :2]` создаст тензор формы `(4, 1, 2)`. |
---|
общедоступный статический StridedSlice.Options ShrinkAxisMask (Long ShrinkAxisMask)
Параметры
ShrinkAxisMask | битовая маска, где бит `i` подразумевает, что `i`-я спецификация должна уменьшить размерность. начало и конец должны подразумевать срез размера 1 в измерении. Например, в Python можно сделать `foo[:, 3, :]`, что приведет к тому, что `shrink_axis_mask` будет равен 2. |
---|