ScatterNd

classe finale pubblica ScatterNd

Distribuisce gli "aggiornamenti" in un tensore di forma "shape" in base agli "indici".

Distribuisci "aggiornamenti" sparsi in base ai singoli valori negli "indici" specificati. Questa operazione restituisce un tensore di output con la "forma" specificata. Questa operazione è l'inverso dell'operatore tf.gather_nd che estrae valori o sezioni da un dato tensore.

Questa operazione è simile a tf.tensor_scatter_nd_add , tranne per il fatto che il tensore è inizializzato con zero. La chiamata tf.scatter_nd(indices, updates, shape) è identica alla chiamata a "tf.tensor_scatter_nd_add(tf.zeros(Shape, Updates.dtype), Indexs, Updates)"

Se gli "indici" contengono duplicati, gli "aggiornamenti" associati vengono accumulati (sommati) nel tensore di output.

ATTENZIONE : per i tipi di dati a virgola mobile, l'output potrebbe non essere deterministico. Questo perché l'ordine in cui vengono applicati gli aggiornamenti non è deterministico e quando i numeri in virgola mobile vengono aggiunti in ordini diversi l'errore di approssimazione numerica risultante può essere leggermente diverso. Tuttavia, l'output sarà deterministico se il determinismo operativo è abilitato tramite tf.config.experimental.enable_op_determinism .

"indices" è un tensore intero contenente indici nel tensore di output. L'ultima dimensione degli "indici" può essere al massimo il rango di "forma":

indici.forma[-1] <= forma.rango

L'ultima dimensione di "indices" corrisponde agli indici degli elementi (se `indices.shape[-1] = shape.rank`) o delle fette (se `indices.shape[-1] < shape.rank`) lungo la dimensione "indices" .forma[-1]` di `forma`.

`updates` è un tensore con la forma:

indici.forma[:-1] + forma[indice.forma[-1]:]

La forma più semplice dell'operazione di dispersione è inserire singoli elementi in un tensore tramite indice. Considera un esempio in cui desideri inserire 4 elementi sparsi in un tensore di rango 1 con 8 elementi.

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

indices = tf.constant([[4], [3], [1], [7]])
     updates = tf.constant([9, 10, 11, 12])
     shape = tf.constant([8])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
Il tensore risultante sarebbe simile a questo:

[0, 11, 0, 10, 9, 0, 0, 12]

È inoltre possibile inserire intere sezioni di un tensore di rango superiore tutte in una volta. Ad esempio, puoi inserire due fette nella prima dimensione di un tensore di rango 3 con due matrici di nuovi valori.

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

indices = tf.constant([[1], [3]])
     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]]])
     shape = tf.constant([4, 4, 4])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
Il tensore risultante sarebbe simile a questo:

[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5 , 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], [[0, 0, 0, 0], [0, 0 , 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5, 5], [6, 6, 6, 6], [7 , 7, 7, 7], [8, 8, 8, 8]]]

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.

Metodi pubblici

Uscita <U>
comeuscita ()
Restituisce la maniglia simbolica di un tensore.
statico <U, T estende Numero> ScatterNd <U>
create (ambito dell'ambito , indici dell'operando <T>, aggiornamenti dell'operando <U>, forma dell'operando <T>)
Metodo factory per creare una classe che racchiude una nuova operazione ScatterNd.
Uscita <U>
produzione ()
Un nuovo tensore con la forma data e aggiornamenti applicati in base agli indici.

Metodi ereditati

Metodi pubblici

Uscita pubblica <U> 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 ScatterNd <U> create (ambito dell'ambito , indici dell'operando <T>, aggiornamenti dell'operando <U>, forma dell'operando <T>)

Metodo factory per creare una classe che racchiude una nuova operazione ScatterNd.

Parametri
scopo ambito attuale
indici Tensore degli indici.
aggiornamenti Valori da disperdere nel tensore di output.
forma 1-D. La forma del tensore di uscita.
ritorna
  • una nuova istanza di ScatterNd

Uscita pubblica <U> uscita ()

Un nuovo tensore con la forma data e aggiornamenti applicati in base agli indici.