Adiciona `atualizações` esparsas a um tensor existente de acordo com `índices`.
Esta operação cria um novo tensor adicionando `atualizações` esparsas ao `tensor` passado. Esta operação é muito semelhante a `tf.scatter_nd_add`, exceto que as atualizações são adicionadas a um tensor existente (em oposição a uma variável). Se a memória do tensor existente não puder ser reutilizada, uma cópia será feita e atualizada.
`indices` é um tensor inteiro contendo índices em um novo tensor de forma `tensor.shape`. A última dimensão dos `índices` pode ser no máximo a classificação de `tensor.shape`:
índices.shape[-1] <= tensor.shape.rank
A última dimensão de `indices` corresponde a índices em elementos (se `indices.shape[-1] = tensor.shape.rank`) ou fatias (se `indices.shape[-1] < tensor.shape.rank`) ao longo da dimensão `indices.shape[-1]` de `tensor.shape`. `updates` é um tensor com forma
índices.forma[:-1] + tensor.forma[indices.forma[-1]:]
A forma mais simples de tensor_scatter_add é adicionar elementos individuais a um tensor por índice. Por exemplo, digamos que queremos adicionar 4 elementos em um tensor de classificação 1 com 8 elementos.
Em Python, esta operação de adição de dispersão ficaria assim:
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)
[1, 12, 1, 11, 10, 1, 1, 13]
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 adição de dispersão ficaria assim:
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)
[[[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]]]
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.
Constantes
Corda | OP_NAME | O nome desta operação, conforme conhecido pelo mecanismo principal do TensorFlow |
Métodos Públicos
Saída <T> | asOutput () Retorna o identificador simbólico do tensor. |
estático <T estende TType > TensorScatterNdAdd <T> | criar (escopo do escopo , tensor do operando <T>, índices do operando <? estende TNumber >, atualizações do operando <T>) Método de fábrica para criar uma classe que envolve uma nova operação TensorScatterNdAdd. |
Saída <T> | saída () Um novo tensor copiado do tensor e atualizado adicionado de acordo com os índices. |
Métodos herdados
Constantes
String final estática pública OP_NAME
O nome desta operação, conforme conhecido pelo mecanismo principal do TensorFlow
Métodos Públicos
Saída pública <T> asOutput ()
Retorna o identificador simbólico do 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 TensorScatterNdAdd <T> create (escopo do escopo , tensor do operando <T>, operando <? estende índices TNumber >, atualizações do operando <T>)
Método de fábrica para criar uma classe que envolve uma nova operação TensorScatterNdAdd.
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 de TensorScatterNdAdd
Saída pública <T> saída ()
Um novo tensor copiado do tensor e atualizado adicionado de acordo com os índices.