Esta página foi traduzida pela API Cloud Translation.
Switch to English

tf.tensor_scatter_nd_add

TensorFlow 1 versão

Adiciona escasso updates a um tensor existente de acordo com indices .

Esta operação cria um novo tensor adicionando esparsas updates para o passado em tensor . Esta operação é muito semelhante ao tf.scatter_nd_add , excepto que as actualizações são adicionados para um tensor existente (em oposição a uma variável). Se a memória para o tensor existente não pode ser re-utilizado, é feita uma cópia e atualizado.

indices é um tensor inteiro contendo índices para uma nova tensor de forma tensor.shape . A última dimensão de indices pode ser, no máximo, o posto de tensor.shape :

 indices.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 dimensão indices.shape[-1] de tensor.shape . updates é um tensor com forma

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

A forma mais simples de tensor_scatter_add é adicionar elementos individuais a um tensor pelo índice. Por exemplo, digamos que queremos acrescentar 4 elementos em um tensor rank-1 com 8 elementos.

Em Python, esta operação de dispersão add 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)
 

O tensor resultando ficaria assim:

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

Podemos também, inserir fatias inteiras de um posto mais alto tensor de uma só vez. Por exemplo, se quiséssemos inserir duas fatias na primeira dimensão de um tensor rank-3 com duas matrizes de novos valores.

Em Python, esta operação de dispersão add 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)
 

O tensor resultando ficaria assim:

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

Note-se que na CPU, se um fora do índice limite for encontrado, um erro é retornado. Em GPU, se um fora do índice limite for encontrado, o índice é ignorado.

tensor A Tensor . Tensor para copiar / update.
indices A Tensor . Deve ser um dos seguintes tipos: int32 , int64 . tensor índice.
updates A Tensor . Deve ter o mesmo tipo de tensor . Atualizações para espalharei a saída.
name Um nome para a operação (opcional).

A Tensor . Tem o mesmo tipo de tensor .