TensorScatterAdd

public final class TensorScatterAdd

Aggiunge "aggiornamenti" sparsi a un tensore esistente secondo "indici".

Questa operazione crea un nuovo tensore aggiungendo "aggiornamenti" sparsi al "tensore" passato. Questa operazione è molto simile a `tf.scatter_nd_add`, tranne per il fatto che gli aggiornamenti vengono aggiunti a un tensore esistente (al contrario di una variabile). Se la memoria per il tensore esistente non può essere riutilizzata, viene eseguita e aggiornata una copia.

`indices` è un tensore intero contenente indici in un nuovo tensore di forma` tensor.shape`. L'ultima dimensione di `indices` può essere al massimo il rango di` tensor.shape`:

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

L'ultima dimensione di `indices` corrisponde agli indici in elementi (se` indices.shape [-1] = tensor.shape.rank`) o sezioni (se `indices.shape [-1] <tensor.shape.rank`) lungo la dimensione `indices.shape [-1]` di `tensor.shape`. "updates" è un tensore con forma

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

La forma più semplice di tensor_scatter_add consiste nell'aggiungere singoli elementi a un tensore per indice. Ad esempio, supponiamo di voler aggiungere 4 elementi in un tensore di rango 1 con 8 elementi.

In Python, questa operazione di aggiunta a dispersione sarebbe simile a questa:

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)
 
Il tensore risultante sarebbe simile a questo:

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

Possiamo anche inserire intere fette di un tensore di rango più alto tutte in una volta. Ad esempio, se volessimo inserire due sezioni nella prima dimensione di un tensore di rango 3 con due matrici di nuovi valori.

In Python, questa operazione di aggiunta a dispersione sarebbe simile a questa:

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)
 
Il tensore risultante sarebbe simile a questo:

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

Notare che sulla CPU, se viene trovato un indice fuori limite, viene restituito un errore. Sulla GPU, se viene trovato un indice fuori limite, l'indice viene ignorato.

Metodi pubblici

Uscita <T>
asOutput ()
Restituisce la maniglia simbolica di un tensore.
static <T, U estende Number> TensorScatterAdd <T>
create ( ambito ambito, operando <T> tensore, operando <U> indici, operando <T> aggiornamenti)
Metodo Factory per creare una classe che racchiude una nuova operazione TensorScatterAdd.
Uscita <T>
uscita ()
Un nuovo tensore copiato da tensore e aggiornamenti aggiunti in base agli indici.

Metodi ereditati

Metodi pubblici

output pubblico <T> asOutput ()

Restituisce la maniglia simbolica di un tensore.

Gli input per le operazioni TensorFlow sono output di un'altra operazione TensorFlow. Questo metodo viene utilizzato per ottenere un handle simbolico che rappresenta il calcolo dell'input.

public static TensorScatterAdd <T> create ( ambito ambito, operando <T> tensore, operando <U> indici, operando <T> aggiornamenti)

Metodo Factory per creare una classe che racchiude una nuova operazione TensorScatterAdd.

Parametri
scopo ambito attuale
tensore Tensore da copiare / aggiornare.
indici Tensore dell'indice.
aggiornamenti Aggiornamenti per diffondersi nell'output.
ritorna
  • una nuova istanza di TensorScatterAdd

output pubblico <T> output ()

Un nuovo tensore copiato da tensore e aggiornamenti aggiunti in base agli indici.