ScatterNd

classe finale publique ScatterNd

Disperse les « mises à jour » dans un tenseur de forme « shape » selon les « indices ».

Dispersez les « mises à jour » éparses en fonction des valeurs individuelles aux « indices » spécifiés. Cette opération renvoie un tenseur de sortie avec la « forme » que vous spécifiez. Cette opération est l'inverse de l'opérateur tf.gather_nd qui extrait des valeurs ou des tranches d'un tenseur donné.

Cette opération est similaire à tf.tensor_scatter_nd_add , sauf que le tenseur est initialisé à zéro. L'appel de tf.scatter_nd(indices, updates, shape) est identique à l'appel de `tf.tensor_scatter_nd_add(tf.zeros(shape, mises à jour.dtype), indices, mises à jour)`

Si les « indices » contiennent des doublons, les « mises à jour » associées sont accumulées (additionnées) dans le tenseur de sortie.

AVERTISSEMENT : pour les types de données à virgule flottante, la sortie peut être non déterministe. En effet, l'ordre dans lequel les mises à jour sont appliquées n'est pas déterministe et lorsque des nombres à virgule flottante sont ajoutés dans des ordres différents, l'erreur d'approximation numérique qui en résulte peut être légèrement différente. Cependant, la sortie sera déterministe si le déterminisme opérationnel est activé via tf.config.experimental.enable_op_determinism .

`indices` est un tenseur entier contenant des indices dans le tenseur de sortie. La dernière dimension des « indices » peut être au plus le rang de « forme » :

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

La dernière dimension des `indices` correspond aux indices des éléments (si `indices.shape[-1] = shape.rank`) ou des tranches (si `indices.shape[-1] < shape.rank`) le long de la dimension `indices .shape[-1]` de `forme`.

`updates` est un tenseur de forme :

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

La forme la plus simple de l'opération scatter consiste à insérer des éléments individuels dans un tenseur par index. Prenons un exemple où vous souhaitez insérer 4 éléments dispersés dans un tenseur de rang 1 avec 8 éléments.

En Python, cette opération de dispersion ressemblerait à ceci :

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)
 
Le tenseur résultant ressemblerait à ceci :

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

Vous pouvez également insérer des tranches entières d'un tenseur de rang supérieur en une seule fois. Par exemple, vous pouvez insérer deux tranches dans la première dimension d'un tenseur de rang 3 avec deux matrices de nouvelles valeurs.

En Python, cette opération de dispersion ressemblerait à ceci :

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)
 
Le tenseur résultant ressemblerait à ceci :

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

Notez que sur le CPU, si un index hors limite est trouvé, une erreur est renvoyée. Sur GPU, si un index hors limite est trouvé, l'index est ignoré.

Méthodes publiques

Sortie <U>
comme Sortie ()
Renvoie le handle symbolique d'un tenseur.
statique <U, T étend le nombre> ScatterNd <U>
créer (portée de portée , indices d'opérande <T>, mises à jour d'opérande <U>, forme d'opérande <T>)
Méthode d'usine pour créer une classe encapsulant une nouvelle opération ScatterNd.
Sortie <U>
sortir ()
Un nouveau tenseur avec la forme donnée et des mises à jour appliquées en fonction des indices.

Méthodes héritées

Méthodes publiques

sortie publique <U> asOutput ()

Renvoie le handle symbolique d'un tenseur.

Les entrées des opérations TensorFlow sont les sorties d'une autre opération TensorFlow. Cette méthode est utilisée pour obtenir un handle symbolique qui représente le calcul de l’entrée.

public static ScatterNd <U> créer (portée de portée , indices d'opérande <T>, mises à jour d' opérande <U>, forme d'opérande <T>)

Méthode d'usine pour créer une classe encapsulant une nouvelle opération ScatterNd.

Paramètres
portée portée actuelle
indices Tenseur d'indices.
mises à jour Valeurs à disperser dans le tenseur de sortie.
forme 1-D. La forme du tenseur de sortie.
Retour
  • une nouvelle instance de ScatterNd

Sortie publique Sortie <U> ()

Un nouveau tenseur avec la forme donnée et des mises à jour appliquées en fonction des indices.