Spec-Zone.ru › TensorFlow

tf.raw_ops.ScatterNd

Рассылает updates в тензор формы shape в соответствии с indices.

Псевдонимы

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

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.raw_ops.ScatterNd

tf.raw_ops.ScatterNd(
    indices, updates, shape, name=None
)

Рассылает разреженные updates согласно отдельным значениям в указанных indices. Этот оператор возвращает выходной тензор с shape, которые вы указали. Этот оператор является обратным оператору tf.gather_nd, который извлекает значения или срезы из заданного тензора.

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

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

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

indices — целочисленный тензор, содержащий индексы в выходной тензор. Последнее измерение 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]:]

Простейший вид оператора scatter заключается в вставке отдельных элементов в тензор по индексу. Рассмотрим пример, где необходимо вставить 4 рассеянных элемента в тензор ранга-1 с 8 элементами.

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

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 эта операция scatter будет выглядеть так:

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]]]

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

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

© 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/raw_ops/ScatterNd

Spec-Zone.ru

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