MatrixSetDiag

classe finale publique MatrixSetDiag

Renvoie un tenseur matriciel par lots avec de nouvelles valeurs diagonales par lots.

Étant donné « input » et « diagonale », cette opération renvoie un tenseur avec la même forme et les mêmes valeurs que « input », à l'exception des diagonales spécifiées des matrices les plus internes. Celles-ci seront écrasées par les valeurs en « diagonale ».

`input` a les dimensions `r+1` `[I, J, ..., L, M, N]`. Lorsque `k` est scalaire ou `k[0] == k[1]`, `diagonale` a `r` dimensions `[I, J, ..., L, max_diag_len]`. Sinon, il a des dimensions `r+1` `[I, J, ..., L, num_diags, max_diag_len]`. `num_diags` est le nombre de diagonales, `num_diags = k[1] - k[0] + 1`. `max_diag_len` est la diagonale la plus longue de la plage `[k[0], k[1]]`, `max_diag_len = min(M + min(k[1], 0), N + min(-k[0] , 0))`

Le résultat est un tenseur de rang « k+1 » de dimensions « [I, J, ..., L, M, N] ». Si `k` est scalaire ou `k[0] == k[1]` :

output[i, j, ..., l, m, n]
   = diagonal[i, j, ..., l, n-max(k[1], 0)] ; if n - m == k[1]
     input[i, j, ..., l, m, n]              ; otherwise
 
Sinon,
output[i, j, ..., l, m, n]
   = diagonal[i, j, ..., l, diag_index, index_in_diag] ; if k[0] <= d <= k[1]
     input[i, j, ..., l, m, n]                         ; otherwise
 
où `d = n - m`, `diag_index = k[1] - d` et ` index_in_diag = n - max(d, 0) + offset`.

`offset` est nul sauf lorsque l'alignement de la diagonale est vers la droite.

offset = max_diag_len - diag_len(d) ; if (`align` in {RIGHT_LEFT, RIGHT_RIGHT
                                            and `d >= 0`) or
                                          (`align` in {LEFT_RIGHT, RIGHT_RIGHT}
                                            and `d <= 0`)
          0                          ; otherwise
 }
où `diag_len(d) = min(cols - max(d, 0), rows + min(d, 0))`.

Par exemple :

# The main diagonal.
 input = np.array([[[7, 7, 7, 7],              # Input shape: (2, 3, 4)
                    [7, 7, 7, 7],
                    [7, 7, 7, 7]],
                   [[7, 7, 7, 7],
                    [7, 7, 7, 7],
                    [7, 7, 7, 7]]])
 diagonal = np.array([[1, 2, 3],               # Diagonal shape: (2, 3)
                      [4, 5, 6]])
 tf.matrix_set_diag(input, diagonal)
   ==> [[[1, 7, 7, 7],  # Output shape: (2, 3, 4)
         [7, 2, 7, 7],
         [7, 7, 3, 7]],
        [[4, 7, 7, 7],
         [7, 5, 7, 7],
         [7, 7, 6, 7]]]
 
 # A superdiagonal (per batch).
 tf.matrix_set_diag(input, diagonal, k = 1)
   ==> [[[7, 1, 7, 7],  # Output shape: (2, 3, 4)
         [7, 7, 2, 7],
         [7, 7, 7, 3]],
        [[7, 4, 7, 7],
         [7, 7, 5, 7],
         [7, 7, 7, 6]]]
 
 # A band of diagonals.
 diagonals = np.array([[[0, 9, 1],  # Diagonal shape: (2, 4, 3)
                        [6, 5, 8],
                        [1, 2, 3],
                        [4, 5, 0]],
                       [[0, 1, 2],
                        [5, 6, 4],
                        [6, 1, 2],
                        [3, 4, 0]]])
 tf.matrix_set_diag(input, diagonals, k = (-1, 2))
   ==> [[[1, 6, 9, 7],  # Output shape: (2, 3, 4)
         [4, 2, 5, 1],
         [7, 5, 3, 8]],
        [[6, 5, 1, 7],
         [3, 1, 6, 2],
         [7, 4, 2, 4]]]
 
 # LEFT_RIGHT alignment.
 diagonals = np.array([[[9, 1, 0],  # Diagonal shape: (2, 4, 3)
                        [6, 5, 8],
                        [1, 2, 3],
                        [0, 4, 5]],
                       [[1, 2, 0],
                        [5, 6, 4],
                        [6, 1, 2],
                        [0, 3, 4]]])
 tf.matrix_set_diag(input, diagonals, k = (-1, 2), align="LEFT_RIGHT")
   ==> [[[1, 6, 9, 7],  # Output shape: (2, 3, 4)
         [4, 2, 5, 1],
         [7, 5, 3, 8]],
        [[6, 5, 1, 7],
         [3, 1, 6, 2],
         [7, 4, 2, 4]]]
 
 

Classes imbriquées

classe MatrixSetDiag.Options Attributs facultatifs pour MatrixSetDiag

Constantes

Chaîne OP_NAME Le nom de cette opération, tel que connu par le moteur principal TensorFlow

Méthodes publiques

MatrixSetDiag.Options statique
aligner (alignement de chaîne)
Sortie <T>
comme Sortie ()
Renvoie le handle symbolique du tenseur.
statique <T étend TType > MatrixSetDiag <T>
créer ( Scope scope, Opérande <T> entrée, Opérande <T> diagonale, Opérande < TInt32 > k, Options... options)
Méthode d'usine pour créer une classe encapsulant une nouvelle opération MatrixSetDiag.
Sortie <T>
sortir ()
Classez « r+1 », avec « output.shape = input.shape ».

Méthodes héritées

Constantes

chaîne finale statique publique OP_NAME

Le nom de cette opération, tel que connu par le moteur principal TensorFlow

Valeur constante : "MatrixSetDiagV3"

Méthodes publiques

public static MatrixSetDiag.Options aligner (alignement de chaînes)

Paramètres
aligner Certaines diagonales sont plus courtes que `max_diag_len` et doivent être complétées. `align` est une chaîne spécifiant comment les superdiagonales et les sous-diagonales doivent être alignées, respectivement. Il existe quatre alignements possibles : "RIGHT_LEFT" (par défaut), "LEFT_RIGHT", "LEFT_LEFT" et "RIGHT_RIGHT". "RIGHT_LEFT" aligne les superdiagonales vers la droite (remplit la ligne à gauche) et les sous-diagonales vers la gauche (remplit la ligne à droite). C'est le format d'emballage utilisé par LAPACK. cuSPARSE utilise "LEFT_RIGHT", qui est l'alignement opposé.

sortie publique <T> asOutput ()

Renvoie le handle symbolique du 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 MatrixSetDiag <T> créer (portée de la portée , entrée de l'opérande <T>, diagonale de l'opérande <T>, opérande < TInt32 > k, options... options)

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

Paramètres
portée portée actuelle
saisir Classez « r+1 », où « r >= 1 ».
diagonale Classez « r » lorsque « k » est un entier ou « k[0] == k[1] ». Sinon, il a le rang « r+1 ». `k >= 1`.
k Décalage(s) diagonal(s). Une valeur positive signifie une superdiagonale, 0 fait référence à la diagonale principale et une valeur négative signifie des sous-diagonales. « k » peut être un seul entier (pour une seule diagonale) ou une paire d'entiers spécifiant les extrémités inférieure et supérieure d'une bande matricielle. `k[0]` ne doit pas être supérieur à `k[1]`.
choix porte des valeurs d'attributs facultatifs
Retour
  • une nouvelle instance de MatrixSetDiag

sortie publique <T> sortie ()

Classez « r+1 », avec « output.shape = input.shape ».