ScatterNd

публичный финальный класс ScatterNd

Раскидывает «обновления» в тензор формы «форма» в соответствии с «индексами».

Распределите редкие «обновления» в соответствии с отдельными значениями по указанным «индексам». Эта операция возвращает выходной тензор указанной вами формы. Эта операция является обратной операцией tf.gather_nd , которая извлекает значения или срезы из заданного тензора.

Эта операция аналогична tf.tensor_scatter_nd_add , за исключением того, что тензор инициализируется нулем. Вызов tf.scatter_nd(indices, updates, shape) идентичен вызову tf.tensor_scatter_nd_add(tf.zeros(shape, update.dtype), indexs, update)`

Если индексы содержат дубликаты, соответствующие «обновления» накапливаются (суммируются) в выходной тензор.

ВНИМАНИЕ : Для типов данных с плавающей запятой выходные данные могут быть недетерминированными. Это связано с тем, что порядок применения обновлений недетерминирован, и когда числа с плавающей запятой добавляются в разном порядке, результирующая ошибка числовой аппроксимации может немного отличаться. Однако выходные данные будут детерминированными, если детерминизм операций включен через tf.config.experimental.enable_op_determinism .

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

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

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

`updates` — это тензор формы:

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

Самая простая форма операции разброса — вставка отдельных элементов в тензор по индексу. Рассмотрим пример, в котором вы хотите вставить 4 разбросанных элемента в тензор ранга 1 с 8 элементами.

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

indices = tf.constant([[4], [3], [1], [7]])
     updates = tf.constant([9, 10, 11, 12])
     shape = tf.constant([8])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
Результирующий тензор будет выглядеть так:

[0, 11, 0, 10, 9, 0, 0, 12]

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

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

indices = tf.constant([[1], [3]])
     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]]])
     shape = tf.constant([4, 4, 4])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
Результирующий тензор будет выглядеть так:

[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5 , 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], [[0, 0, 0, 0], [0, 0 , 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5, 5], [6, 6, 6, 6], [7 , 7, 7, 7], [8, 8, 8, 8]]]

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

Публичные методы

Выход <U>
какВывод ()
Возвращает символический дескриптор тензора.
static <U, T расширяет число> ScatterNd <U>
create (область действия , индексы операнда <T>, обновления операнда <U>, форма операнда <T>)
Фабричный метод для создания класса, обертывающего новую операцию ScatterNd.
Выход <U>
выход ()
Новый тензор с заданной формой и обновлениями, примененными в соответствии с индексами.

Унаследованные методы

Публичные методы

публичный вывод <U> asOutput ()

Возвращает символический дескриптор тензора.

Входные данные для операций TensorFlow являются выходными данными другой операции TensorFlow. Этот метод используется для получения символического дескриптора, который представляет собой вычисление входных данных.

public static ScatterNd <U> create (область действия , индексы операнда <T>, обновления операнда <U>, форма операнда <T>)

Фабричный метод для создания класса, обертывающего новую операцию ScatterNd.

Параметры
объем текущий объем
индексы Тензор индексов.
обновления Значения, которые нужно разбросать по выходному тензору.
форма 1-Д. Форма выходного тензора.
Возврат
  • новый экземпляр ScatterNd

публичный вывод <U> вывод ()

Новый тензор с заданной формой и обновлениями, примененными в соответствии с индексами.