tf.strided_slice
| Просмотреть исходный код на GitHub |
Извлекает срез тензора с шагом (обобщённый индексирование массивов 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. Интерфейс этого оператора — это низкоуровневое кодирование синтаксиса срезов.
Грубо говоря, этот оператор извлекает срез размером (end-begin)/stride из данного input_ тензора. Начиная с позиции, указанной 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. |
© 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/strided_slice