Spec-Zone.ru › TensorFlow

tf.tensor_scatter_nd_sub

Вычитает разреженные updates из существующего тензора согласно indices.

Просмотреть псевдонимы

Псевдонимы для совместимости при миграции

Подробнее см. в руководстве по миграции.

tf.compat.v1.tensor_scatter_nd_sub, tf.compat.v1.tensor_scatter_sub

tf.tensor_scatter_nd_sub(
    tensor: Annotated[Any, TV_TensorScatterSub_T],
    indices: Annotated[Any, TV_TensorScatterSub_Tindices],
    updates: Annotated[Any, TV_TensorScatterSub_T],
    name=None
) -> Annotated[Any, TV_TensorScatterSub_T]

Используется в блокнотах

Используется в руководстве
  • Введение в срезы тензоров

Эта операция создает новый тензор, вычитая разреженные updates из переданного tensor. Эта операция очень похожа на tf.scatter_nd_sub, за исключением того, что обновления вычитаются из существующего тензора (а не из переменной). Если память существующего тензора нельзя использовать повторно, создается его копия и обновляется.

indices — это целочисленный тензор, содержащий индексы элементов нового тензора формы shape. Последнее измерение indices может быть не больше ранга shape:

indices.shape[-1] <= shape.rank

Последнее измерение indices соответствует индексам элементов (если indices.shape[-1] = shape.rank) или срезов (если indices.shape[-1] < shape.rank) вдоль измерения indices.shape[-1] тензора shape. updates — это тензор формы

indices.shape[:-1] + shape[indices.shape[-1]:]

Самый простой вариант tensor_scatter_sub — вычесть отдельные элементы из тензора по индексам. Например, предположим, что нужно вставить 4 разрозненных элемента в тензор ранга 1, содержащий 8 элементов.

В Python эта операция разреженного вычитания выглядела бы так:

indices = tf.constant([[4], [3], [1], [7]])
updates = tf.constant([9, 10, 11, 12])
tensor = tf.ones([8], dtype=tf.int32)
updated = tf.tensor_scatter_nd_sub(tensor, indices, updates)
print(updated)

В результате получится следующий тензор:

[1, -10, 1, -9, -8, 1, 1, -11]

Также можно сразу вставить целые срезы тензора более высокого ранга. Например, предположим, что нужно вставить два среза в первое измерение тензора ранга 3, используя две матрицы новых значений.

В Python эта операция разреженного сложения выглядела бы так:

indices = tf.constant([[0], [2]])
updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6],
                        [7, 7, 7, 7], [8, 8, 8, 8]],
                       [[5, 5, 5, 5], [6, 6, 6, 6],
                        [7, 7, 7, 7], [8, 8, 8, 8]]])
tensor = tf.ones([4, 4, 4],dtype=tf.int32)
updated = tf.tensor_scatter_nd_sub(tensor, indices, updates)
print(updated)

В результате получится следующий тензор:

[[[-4, -4, -4, -4], [-5, -5, -5, -5], [-6, -6, -6, -6], [-7, -7, -7, -7]],
 [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]],
 [[-4, -4, -4, -4], [-5, -5, -5, -5], [-6, -6, -6, -6], [-7, -7, -7, -7]],
 [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]]

Обратите внимание: на CPU при обнаружении индекса за пределами допустимого диапазона возвращается ошибка. На GPU такой индекс игнорируется.

Аргументы
tensor Tensor. Тензор для копирования или обновления.
indices Tensor. Должен иметь один из следующих типов: int32, int64. Тензор индексов.
updates Tensor. Должен иметь тот же тип, что и tensor. Обновления для разреженного добавления в выходной тензор.
name Имя операции (необязательно).
Возвращаемое значение
Tensor. Имеет тот же тип, что и tensor.

© 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/tensor_scatter_nd_sub

Spec-Zone.ru

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