tf.strided_slice
Извлекает срез тензора с заданным шагом (обобщённая индексация массивов в стиле Python).
tf.strided_slice(
input_,
begin,
end,
strides=None,
begin_mask=0,
end_mask=0,
ellipsis_mask=0,
new_axis_mask=0,
shrink_axis_mask=0,
var=None,
name=None
)
См. также tf.slice.
Вместо прямого вызова этой операции большинству пользователей следует использовать синтаксис срезов в стиле NumPy (например, tensor[..., 3:4:-1, tf.newaxis, 3]), который поддерживается с помощью tf.Tensor.getitem и tf.Variable.getitem. Интерфейс этой операции представляет собой низкоуровневое представление синтаксиса срезов.
В общих чертах эта операция извлекает из заданного тензора input_ срез размером (end-begin)/stride. Начиная с позиции, указанной в begin, срез продолжается с прибавлением stride к индексу, пока все измерения не станут меньше end. Обратите внимание, что шаг может быть отрицательным, что приводит к обратному срезу.
Для среза Python input[spec0, spec1, ..., specn] эта функция будет вызвана следующим образом.
begin, end и strides будут векторами длины n. В общем случае n не равно рангу тензора input_.
В каждом поле маски (begin_mask, end_mask, ellipsis_mask, new_axis_mask, shrink_axis_mask) i-й бит соответствует i-й спецификации.
Если установлен i-й бит в begin_mask, begin[i] игнорируется, и вместо него используется максимально возможный диапазон в этом измерении. end_mask работает аналогично, но для конечного диапазона.
foo[5:,:,:3] для тензора размером 7x8x9 эквивалентно foo[5:7,0:8,0:3]. foo[::-1] обращает тензор с формой 8.
Если установлен i-й бит в ellipsis_mask, между другими измерениями будет добавлено столько неуказанных измерений, сколько необходимо. В ellipsis_mask допускается только один ненулевой бит.
Например, foo[3:5,...,4:5] для тензора формы 10x3x3x10 эквивалентно foo[3:5,:,:,4:5], а foo[3:5,...] эквивалентно foo[3:5,:,:,:].
Если установлен i-й бит в new_axis_mask, то begin, end и stride игнорируются, а в этой позиции в выходной тензор добавляется новое измерение длины 1.
Например, foo[:4, tf.newaxis, :2] создаст тензор формы (4, 1, 2).
Если установлен i-й бит в shrink_axis_mask, это означает, что i-я спецификация уменьшает размерность на 1, принимая значение по индексу begin[i]. В этом случае end[i] и strides[i] игнорируются. Например, в Python можно написать foo[:, 3, :], в результате чего shrink_axis_mask будет равно 2.
Примечание:beginиendиспользуют индексацию с нуля. Элементыstridesдолжны быть ненулевыми.
t = tf.constant([[[1, 1, 1], [2, 2, 2]],
[[3, 3, 3], [4, 4, 4]],
[[5, 5, 5], [6, 6, 6]]])
tf.strided_slice(t, [1, 0, 0], [2, 1, 3], [1, 1, 1]) # [[[3, 3, 3]]]
tf.strided_slice(t, [1, 0, 0], [2, 2, 3], [1, 1, 1]) # [[[3, 3, 3],
# [4, 4, 4]]]
tf.strided_slice(t, [1, -1, 0], [2, -3, 3], [1, -1, 1]) # [[[4, 4, 4],
# [3, 3, 3]]]
| Аргументы | |
|---|---|
input_ | Объект типа Tensor. |
begin | Объект типа int32 или int64 Tensor. |
end | Объект типа int32 или int64 Tensor. |
strides | Объект типа int32 или int64 Tensor. |
begin_mask | Маска int32. |
end_mask | Маска int32. |
ellipsis_mask | Маска int32. |
new_axis_mask | Маска int32. |
shrink_axis_mask | Маска int32. |
var | Переменная, соответствующая input_, или None |
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/strided_slice