ScatterNd

classe finale publique ScatterNd

Dispersez les « mises à jour » dans un nouveau tenseur selon les « indices ».

Crée un nouveau tenseur en appliquant des « mises à jour » clairsemées à des valeurs individuelles ou des tranches dans un tenseur (initialement zéro pour un numérique, vide pour une chaîne) de la « forme » donnée en fonction des indices. Cet opérateur 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 à tensor_scatter_add, sauf que le tenseur est initialisé à zéro. L'appel de `tf.scatter_nd(indices, valeurs, forme)` est identique à `tensor_scatter_add(tf.zeros(shape, values.dtype), indices, valeurs)`

Si les « indices » contiennent des doublons, alors leurs mises à jour sont accumulées (additionnées).

AVERTISSEMENT : l'ordre dans lequel les mises à jour sont appliquées est non déterministe, donc la sortie sera non déterministe si "indices" contient des doublons -- en raison de certains problèmes d'approximation numérique, les nombres additionnés dans un ordre différent peuvent donner des résultats différents.

`indices` est un tenseur entier contenant des indices dans un nouveau tenseur de forme `shape`. 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 en éléments (si `indices.shape[-1] = shape.rank`) ou en tranches (si `indices.shape[-1] < shape.rank`) le long de la dimension `indices .shape[-1]` de `forme`. `updates` est un tenseur avec une forme

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

La forme de dispersion la plus simple consiste à insérer des éléments individuels dans un tenseur par index. Par exemple, disons que nous voulons 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]

Nous pouvons également insérer des tranches entières d’un tenseur de rang supérieur d’un seul coup. Par exemple, si l'on voulait 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([[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]]])
     shape = tf.constant([4, 4, 4])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
Le tenseur résultant ressemblerait à ceci :

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

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'indice.
mises à jour Mises à jour à disperser dans la sortie.
forme 1-D. La forme du tenseur résultant.
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.