ScatterNd

clase final pública ScatterNd

Dispersa las "actualizaciones" en un tensor de forma "forma" según los "índices".

Distribuya las "actualizaciones" dispersas de acuerdo con los valores individuales en los "índices" especificados. Esta operación devuelve un tensor de salida con la "forma" que especifique. Esta operación es la inversa del operador tf.gather_nd que extrae valores o cortes de un tensor determinado.

Esta operación es similar a tf.tensor_scatter_nd_add , excepto que el tensor está inicializado en cero. Llamar tf.scatter_nd(indices, updates, shape) es idéntico a llamar a `tf.tensor_scatter_nd_add (tf.zeros (forma, actualizaciones.dtype), índices, actualizaciones)`

Si los "índices" contienen duplicados, las "actualizaciones" asociadas se acumulan (suman) en el tensor de salida.

ADVERTENCIA : Para tipos de datos de punto flotante, la salida puede ser no determinista. Esto se debe a que el orden en el que se aplican las actualizaciones no es determinista y cuando se agregan números de punto flotante en diferentes órdenes, el error de aproximación numérica resultante puede ser ligeramente diferente. Sin embargo, el resultado será determinista si el determinismo operacional está habilitado a través de tf.config.experimental.enable_op_determinism .

`indices` es un tensor entero que contiene índices en el tensor de salida. La última dimensión de los "índices" puede ser como máximo el rango de "forma":

índices.forma[-1] <= forma.rango

La última dimensión de `indices` corresponde a índices de elementos (si `indices.shape[-1] = shape.rank`) o cortes (si `indices.shape[-1] < shape.rank`) a lo largo de la dimensión `indices .forma[-1]` de `forma`.

`actualizaciones` es un tensor con forma:

índices.forma[:-1] + forma[índices.forma[-1]:]

La forma más simple de operación de dispersión es insertar elementos individuales en un tensor por índice. Considere un ejemplo en el que desea insertar 4 elementos dispersos en un tensor de rango 1 con 8 elementos.

En Python, esta operación de dispersión se vería así:

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)
 
El tensor resultante se vería así:

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

También puedes insertar porciones enteras de un tensor de rango superior todas a la vez. Por ejemplo, puede insertar dos sectores en la primera dimensión de un tensor de rango 3 con dos matrices de nuevos valores.

En Python, esta operación de dispersión se vería así:

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)
 
El tensor resultante se vería así:

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

Tenga en cuenta que en la CPU, si se encuentra un índice fuera de límite, se devuelve un error. En GPU, si se encuentra un índice fuera de límite, se ignora el índice.

Métodos públicos

Salida <U>
como salida ()
Devuelve el identificador simbólico de un tensor.
estático <U, T extiende Número> ScatterNd <U>
crear (alcance del alcance , índices del operando <T>, actualizaciones del operando <U>, forma del operando <T>)
Método de fábrica para crear una clase que envuelve una nueva operación ScatterNd.
Salida <U>
producción ()
Un nuevo tensor con la forma dada y actualizaciones aplicadas según los índices.

Métodos heredados

Métodos públicos

Salida pública <U> como Salida ()

Devuelve el identificador simbólico de un tensor.

Las entradas a las operaciones de TensorFlow son salidas de otra operación de TensorFlow. Este método se utiliza para obtener un identificador simbólico que representa el cálculo de la entrada.

creación pública estática de ScatterNd <U> (alcance del alcance , índices del operando <T>, actualizaciones del operando <U>, forma del operando <T>)

Método de fábrica para crear una clase que envuelve una nueva operación ScatterNd.

Parámetros
alcance alcance actual
índices Tensor de índices.
actualizaciones Valores para dispersar en el tensor de salida.
forma 1-D. La forma del tensor de salida.
Devoluciones
  • una nueva instancia de ScatterNd

Salida pública <U> salida ()

Un nuevo tensor con la forma dada y actualizaciones aplicadas según los índices.