TensorScatterОбновить

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

Разбросайте «обновления» по существующему тензору в соответствии с «индексами».

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

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

ВНИМАНИЕ : Порядок применения обновлений недетерминирован, поэтому выходные данные будут недетерминированными, если индексы содержат дубликаты — из-за некоторых проблем числовой аппроксимации числа, суммированные в разном порядке, могут давать разные результаты.

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

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

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

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

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

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

>>> индексы = tf.constant([[4], [3], [1], [7]]) >>> обновления = tf.constant([9, 10, 11, 12]) >>> тензор = tf.ones([8], dtype=tf.int32) >>> print(tf.tensor_scatter_nd_update(тензор, индексы, обновления)) tf.Tensor([ 1 11 1 10 9 1 1 12], shape=(8 ,), dtype=int32)

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

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

>>> индексы = tf.constant([[0], [2]]) >>> обновления = 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) >>> print (tf.tensor_scatter_nd_update(tensor, indexs, update).numpy()) [[[5 5 5 5] [6 6 6 6] [7 7 7 7] [8 8 8 8]] [[1 1 1 1] [1 1 1 1] [1 1 1 1] [1 1 1 1]] [[5 5 5 5] [6 6 6 6] [7 7 7 7] [8 8 8 8]] [[1 1 1 1] [1 1 1 1] [1 1 1 1] [1 1 1 1]]]

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

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

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

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

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

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

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

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

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

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

Параметры
объем текущий объем
тензор Тензор для копирования/обновления.
индексы Индексный тензор.
обновления Обновления раскидывать на вывод.
Возврат
  • новый экземпляр TensorScatterUpdate

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

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