Se usó la API de Cloud Translation para traducir esta página.
Switch to English

tf.tensor_scatter_nd_add

TensorFlow 1 versión

Añade escasa updates a un tensor existente de acuerdo a indices .

Esta operación crea un nuevo tensor mediante la adición de escasos updates a la aprobada en tensor . Esta operación es muy similar a tf.scatter_nd_add , excepto que las actualizaciones se añaden sobre un tensor existente (en oposición a una variable). Si no se puede volver a utilizar la memoria para el tensor existente, se hace una copia y actualizado.

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

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

La última dimensión de indices corresponde a los índices en elementos (si indices.shape[-1] = tensor.shape.rank ) o rebanadas (si indices.shape[-1] < tensor.shape.rank ) a lo largo de dimensión indices.shape[-1] de tensor.shape . updates es un tensor con forma de

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

La forma más simple de tensor_scatter_add es añadir elementos individuales de un tensor por el índice. Por ejemplo, decimos que queremos añadir 4 elementos en un tensor de rango 1 con 8 elementos.

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

     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_add(tensor, indices, updates)
    print(updated)
 

El tensor resultante sería el siguiente:

 [1, 12, 1, 11, 10, 1, 1, 13]
 

También es posible, conecte rebanadas enteras de un tensor de rango superior a la vez. Por ejemplo, si queríamos para insertar dos rebanadas de la primera dimensión de un tensor de rango-3 con dos matrices de nuevos valores.

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

     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_add(tensor, indices, updates)
    print(updated)
 

El tensor resultante sería el siguiente:

 [[[6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8], [9, 9, 9, 9]],
 [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]],
 [[6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8], [9, 9, 9, 9]],
 [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]]
 

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

tensor Un Tensor . Tensor para copiar / actualización.
indices Un Tensor . Debe ser uno de los siguientes tipos: int32 , int64 . tensor de índice.
updates Un Tensor . Deben tener el mismo tipo que el tensor . Cambios a la dispersión en la producción.
name Un nombre para la operación (opcional).

Un Tensor . Tiene el mismo tipo que tensor .