tensor akışı:: işlem:: MatrixSetDiagV3

#include <array_ops.h>

Yeni toplu çapraz değerlere sahip toplu matris tensörünü döndürür.

Özet

input ve diagonal verildiğinde, bu işlem, en içteki matrislerin belirtilen köşegenleri dışında, input ile aynı şekil ve değerlere sahip bir tensör döndürür. Bunların üzerine diagonal değerler yazılacaktır.

input r+1 boyutu vardır [I, J, ..., L, M, N] . k skaler olduğunda veya k[0] == k[1] olduğunda, diagonal r boyutlara sahiptir [I, J, ..., L, max_diag_len] . Aksi takdirde, r+1 boyutları vardır [I, J, ..., L, num_diags, max_diag_len] . num_diags köşegenlerin sayısıdır, num_diags = k[1] - k[0] + 1 . max_diag_len [k[0], k[1]] aralığındaki en uzun köşegendir max_diag_len = min(M + min(k[1], 0), N + min(-k[0], 0))

Çıkış [I, J, ..., L, M, N] boyutlarına sahip k+1 dereceli bir tensördür. Eğer k skaler veya 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

Aksi takdirde,

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
burada d = n - m , diag_index = k[1] - d ve index_in_diag = n - max(d, 0) + offset .

köşegen hizalamasının sağa olması dışında offset sıfırdır.

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
burada diag_len(d) = min(cols - max(d, 0), rows + min(d, 0)) .

Örneğin:

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

  

Arguments:

  • scope: A Scope object
  • input: Rank r+1, where r >= 1.
  • diagonal: Rank r when k is an integer or k[0] == k[1]. Otherwise, it has rank r+1. k >= 1.
  • k: Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main diagonal, and negative value means subdiagonals. k can be a single integer (for a single diagonal) or a pair of integers specifying the low and high ends of a matrix band. k[0] must not be larger than k[1].

Optional attributes (see Attrs):

  • align: Some diagonals are shorter than max_diag_len and need to be padded. align is a string specifying how superdiagonals and subdiagonals should be aligned, respectively. There are four possible alignments: "RIGHT_LEFT" (default), "LEFT_RIGHT", "LEFT_LEFT", and "RIGHT_RIGHT". "RIGHT_LEFT" aligns superdiagonals to the right (left-pads the row) and subdiagonals to the left (right-pads the row). It is the packing format LAPACK uses. cuSPARSE uses "LEFT_RIGHT", which is the opposite alignment.

Returns:

  • Output: Rank r+1, with output.shape = input.shape.

Constructors and Destructors

MatrixSetDiagV3(const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input diagonal, ::tensorflow::Input k)
MatrixSetDiagV3(const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input diagonal, ::tensorflow::Input k, const MatrixSetDiagV3::Attrs & attrs)

Public attributes

operation
output

Public functions

node() const
::tensorflow::Node *
operator::tensorflow::Input() const
operator::tensorflow::Output() const

Public static functions

Align(StringPiece x)

Structs

tensorflow::ops::MatrixSetDiagV3::Attrs

Optional attribute setters for MatrixSetDiagV3.

Public attributes

operation

Operation operation

çıktı

::tensorflow::Output output

Kamu işlevleri

MatrixSetDiagV3

 MatrixSetDiagV3(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input diagonal,
  ::tensorflow::Input k
)

MatrixSetDiagV3

 MatrixSetDiagV3(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input diagonal,
  ::tensorflow::Input k,
  const MatrixSetDiagV3::Attrs & attrs
)

düğüm

::tensorflow::Node * node() const 

operatör::tensorflow::Giriş

 operator::tensorflow::Input() const 

operatör::tensorflow::Çıktı

 operator::tensorflow::Output() const 

Genel statik işlevler

Hizala

Attrs Align(
  StringPiece x
)