Espalhe `atualizações` em um tensor existente de acordo com `índices`.
Esta operação cria um novo tensor aplicando `atualizações` esparsas ao `tensor` passado. Esta operação é muito semelhante a `tf.scatter_nd`, exceto que as atualizações são espalhadas em um tensor existente (em oposição a um tensor zero). Se a memória do tensor existente não puder ser reutilizada, uma cópia será feita e atualizada.
Se `índices` contiverem duplicatas, então suas atualizações serão acumuladas (somadas).
AVISO : A ordem em que as atualizações são aplicadas não é determinística, portanto a saída será não determinística se os `índices` contiverem duplicatas - devido a alguns problemas de aproximação numérica, os números somados em ordens diferentes podem produzir resultados diferentes.
`indices` é um tensor inteiro contendo índices em um novo tensor de forma `shape`. A última dimensão dos `índices` pode ser no máximo a classificação de `forma`:
índices.shape[-1] <= shape.rank
A última dimensão de `indices` corresponde a índices em elementos (se `indices.shape[-1] = shape.rank`) ou fatias (se `indices.shape[-1] < shape.rank`) ao longo da dimensão `indices .forma[-1]` de `forma`. `updates` é um tensor com forma
índices.forma[:-1] + forma[indices.forma[-1]:]
A forma mais simples de dispersão é inserir elementos individuais em um tensor por índice. Por exemplo, digamos que queremos inserir 4 elementos dispersos em um tensor de classificação 1 com 8 elementos.
Em Python, esta operação de dispersão ficaria assim:
>>> índices = tf.constant([[4], [3], [1], [7]]) >>> atualizações = tf.constant([9, 10, 11, 12]) >>> tensor = tf.ones([8], dtype=tf.int32) >>> print(tf.tensor_scatter_nd_update(tensor, índices, atualizações)) tf.Tensor([ 1 11 1 10 9 1 1 12], forma=(8 ,), dtype=int32)
Também podemos inserir fatias inteiras de um tensor de classificação superior de uma só vez. Por exemplo, se quiséssemos inserir duas fatias na primeira dimensão de um tensor de posto 3 com duas matrizes de novos valores.
Em Python, esta operação de dispersão ficaria assim:
>>> índices = tf.constant([[0], [2]]) >>> atualizações = 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) >>> imprimir (tf.tensor_scatter_nd_update(tensor, índices, atualizações).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]]]
Observe que na CPU, se um índice fora do limite for encontrado, um erro será retornado. Na GPU, se um índice fora do limite for encontrado, o índice será ignorado.
Métodos Públicos
Saída <T> | asOutput () Retorna o identificador simbólico de um tensor. |
estático <T, U estende número> TensorScatterUpdate <T> | criar (escopo do escopo , tensor do operando <T>, índices do operando <U>, atualizações do operando <T>) Método de fábrica para criar uma classe que envolve uma nova operação TensorScatterUpdate. |
Saída <T> | saída () Um novo tensor com a forma dada e atualizações aplicadas de acordo com os índices. |
Métodos herdados
Métodos Públicos
Saída pública <T> asOutput ()
Retorna o identificador simbólico de um tensor.
As entradas para operações do TensorFlow são saídas de outra operação do TensorFlow. Este método é usado para obter um identificador simbólico que representa o cálculo da entrada.
public static TensorScatterUpdate <T> create (escopo do escopo , tensor do operando <T>, índices do operando <U>, atualizações do operando <T>)
Método de fábrica para criar uma classe que envolve uma nova operação TensorScatterUpdate.
Parâmetros
escopo | escopo atual |
---|---|
tensor | Tensor para copiar/atualizar. |
índices | Tensor de índice. |
atualizações | Atualizações para dispersão na saída. |
Devoluções
- uma nova instância do TensorScatterUpdate
Saída pública <T> saída ()
Um novo tensor com a forma dada e atualizações aplicadas de acordo com os índices.