Aggiunge "aggiornamenti" sparsi a un tensore esistente in base agli "indici".
Questa operazione crea un nuovo tensore aggiungendo sparsi "aggiornamenti" 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 (invece che a una variabile). Se la memoria del tensore esistente non può essere riutilizzata, viene creata 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":
indici.forma[-1] <= tensore.forma.rango
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". "aggiornamenti" è un tensore con forma
indici.forma[:-1] + tensore.forma[indice.forma[-1]:]
La forma più semplice di tensor_scatter_add consiste nell'aggiungere singoli elementi a un tensore tramite indice. Ad esempio, supponiamo di voler aggiungere 4 elementi in un tensore di rango 1 con 8 elementi.
In Python, questa operazione di aggiunta sparsa 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)
[1, 12, 1, 11, 10, 1, 1, 13]
Possiamo anche inserire intere fette di un tensore di rango superiore tutte in una volta. Ad esempio, se volessimo inserire due fette nella prima dimensione di un tensore di rango 3 con due matrici di nuovi valori.
In Python, questa operazione di aggiunta sparsa 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)
[[[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]]]
Si noti 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.
Costanti
Corda | OP_NAME | Il nome di questa operazione, come noto al motore principale di TensorFlow |
Metodi pubblici
Uscita <T> | comeuscita () Restituisce l'handle simbolico del tensore. |
statico <T estende TType > TensorScatterNdAdd <T> | |
Uscita <T> | produzione () Un nuovo tensore copiato da tensore e aggiornamenti aggiunti in base agli indici. |
Metodi ereditati
Costanti
Stringa finale statica pubblica OP_NAME
Il nome di questa operazione, come noto al motore principale di TensorFlow
Metodi pubblici
Uscita pubblica <T> asOutput ()
Restituisce l'handle simbolico del 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 TensorScatterNdAdd <T> create ( scope scope, operando <T> tensore, operando <? estende TNumber > indici, operando <T> aggiornamenti)
Metodo factory per creare una classe che racchiude una nuova operazione TensorScatterNdAdd.
Parametri
ambito | ambito attuale |
---|---|
tensore | Tensore da copiare/aggiornare. |
indici | Tensore dell'indice. |
aggiornamenti | Aggiornamenti da distribuire nell'output. |
Ritorni
- una nuova istanza di TensorScatterNdAdd
Uscita pubblica <T> uscita ()
Un nuovo tensore copiato da tensore e aggiornamenti aggiunti in base agli indici.