Rassemblez les tranches de « params » dans un Tensor avec une forme spécifiée par « indices ».
`indices` est un tenseur entier à K dimensions, mieux considéré comme un tenseur d'indices à dimensions (K-1) dans `params`, où chaque élément définit une tranche de `params` :
sortir[\\(i_0, ..., i_{K-2}\\)] = paramètres[indices[\\(i_0, ..., i_{K-2}\\)]]
Alors que dans tf.gather
`indices` définit des tranches dans la dimension `axis` de `params`, dans tf.gather_nd
, `indices` définit des tranches dans les premières `N` dimensions de `params`, où `N = indices.shape [-1]`.
La dernière dimension des « indices » peut être au plus le rang de « params » :
indices.shape[-1] <= params.rank
La dernière dimension des `indices` correspond aux éléments (si `indices.shape[-1] == params.rank`) ou aux tranches (si `indices.shape[-1] < params.rank`) le long de la dimension `indices. shape[-1]` de `params`. Le tenseur de sortie a la forme
indices.shape[:-1] + params.shape[indices.shape[-1]:]
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é, un 0 est stocké dans la valeur de sortie correspondante.
Quelques exemples ci-dessous.
Indexation simple dans une matrice :
indices = [[0, 0], [1, 1]]
params = [['a', 'b'], ['c', 'd']]
output = ['a', 'd']
Découper l'indexation dans une matrice : indices = [[1], [0]]
params = [['a', 'b'], ['c', 'd']]
output = [['c', 'd'], ['a', 'b']]
Indexation dans un 3-tenseur : indices = [[1]]
params = [[['a0', 'b0'], ['c0', 'd0']],
[['a1', 'b1'], ['c1', 'd1']]]
output = [[['a1', 'b1'], ['c1', 'd1']]]
indices = [[0, 1], [1, 0]]
params = [[['a0', 'b0'], ['c0', 'd0']],
[['a1', 'b1'], ['c1', 'd1']]]
output = [['c0', 'd0'], ['a1', 'b1']]
indices = [[0, 0, 1], [1, 0, 1]]
params = [[['a0', 'b0'], ['c0', 'd0']],
[['a1', 'b1'], ['c1', 'd1']]]
output = ['b0', 'b1']
Indexation batch dans une matrice : indices = [[[0, 0]], [[0, 1]]]
params = [['a', 'b'], ['c', 'd']]
output = [['a'], ['b']]
Indexation de tranches par lots dans une matrice : indices = [[[1]], [[0]]]
params = [['a', 'b'], ['c', 'd']]
output = [[['c', 'd']], [['a', 'b']]]
Indexation par lots dans un 3-tenseur : indices = [[[1]], [[0]]]
params = [[['a0', 'b0'], ['c0', 'd0']],
[['a1', 'b1'], ['c1', 'd1']]]
output = [[[['a1', 'b1'], ['c1', 'd1']]],
[[['a0', 'b0'], ['c0', 'd0']]]]
indices = [[[0, 1], [1, 0]], [[0, 0], [1, 1]]]
params = [[['a0', 'b0'], ['c0', 'd0']],
[['a1', 'b1'], ['c1', 'd1']]]
output = [[['c0', 'd0'], ['a1', 'b1']],
[['a0', 'b0'], ['c1', 'd1']]]
indices = [[[0, 0, 1], [1, 0, 1]], [[0, 1, 1], [1, 1, 0]]]
params = [[['a0', 'b0'], ['c0', 'd0']],
[['a1', 'b1'], ['c1', 'd1']]]
output = [['b0', 'b1'], ['d0', 'c1']]
Voir aussi tf.gather
et `tf.batch_gather`. Méthodes publiques
Sortie <T> | comme Sortie () Renvoie le handle symbolique d'un tenseur. |
statique <T, U étend le nombre> GatherNd <T> | créer (portée de portée, paramètres d'opérande <T>, indices d'opérande <U>) Méthode d'usine pour créer une classe encapsulant une nouvelle opération GatherNd. |
Sortie <T> | sortir () Valeurs de `params` collectées à partir des indices donnés par `indices`, avec la forme `indices.shape[:-1] + params.shape[indices.shape[-1]:]`. |
Méthodes héritées
Méthodes publiques
sortie publique <T> 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 GatherNd <T> create (portée de portée, paramètres d'opérande <T>, indices d'opérande <U>)
Méthode d'usine pour créer une classe encapsulant une nouvelle opération GatherNd.
Paramètres
portée | portée actuelle |
---|---|
paramètres | Tenseur à partir duquel collecter les valeurs. |
indices | Tenseur d'indice. |
Retours
- une nouvelle instance de GatherNd
sortie publique <T> sortie ()
Valeurs de `params` collectées à partir des indices donnés par `indices`, avec la forme `indices.shape[:-1] + params.shape[indices.shape[-1]:]`.