Condividi tramite


struttura DML_DIAGONAL_MATRIX_OPERATOR_DESC (directml.h)

Genera una matrice simile all'identità con uno (o un altro valore esplicito) sulla diagonale principale e zeri in qualsiasi altra posizione. Le diagonali possono essere spostate (tramite Offset) dove OutputTensor[i, i + Offset] = Value, ovvero un argomento offset maggiore di zero sposta tutti i valori a destra e meno di zero li sposta a sinistra. Questo operatore generatore è utile per i modelli per evitare di archiviare un tensore costante di grandi dimensioni. Tutte le dimensioni iniziali prima delle ultime due vengono considerate come conteggio batch, vale a dire che il tensore viene considerato come stack di matrici 2D.

Questo operatore esegue lo pseudocodice seguente.

for each coordinate in OutputTensor
    OutputTensor[coordinate] = if (coordinate.y + Offset == coordinate.x) then Value else 0
endfor

Sintassi

struct DML_DIAGONAL_MATRIX_OPERATOR_DESC {
  const DML_TENSOR_DESC *OutputTensor;
  INT                   Offset;
  FLOAT                 Value;
};

Members

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensore in cui scrivere i risultati. Le dimensioni sono { Batch1, Batch2, OutputHeight, OutputWidth }. L'altezza e la larghezza non devono essere quadrate.

Offset

Tipo: INT

Offset per spostare le linee diagonali di Value, con offset positivi che spostano il valore scritto verso destra/su (visualizzando l'output come matrice con l'angolo superiore sinistro come 0,0) e gli offset negativi verso sinistra/giù.

Value

Tipo: FLOAT

Valore da riempire lungo la diagonale 2D. Il valore standard è 1,0. Si noti che se il tipo di dati dei tensori non è DML_TENSOR_DATA_TYPE_FLOAT16 o DML_TENSOR_DATA_TYPE_FLOAT32, il valore potrebbe essere troncato (ad esempio, 10,6 diventerà 10).

Esempio

Matrice di identità predefinita:

Offset: 0
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
    [[[[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]]]]

Sposta quelli a destra/su:

Offset: 1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
    [[[[ 0, 1, 0],
       [ 0, 0, 1],
       [ 0, 0, 0]]]]

Sposta quelli a sinistra/giù:

Offset: -1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
    [[[[0, 0],
       [1, 0],
       [0, 1]]]]

Sposta la linea diagonale di quelle fino a questo punto che tutti diventano zero:

Offset: -3
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
    [[[[0, 0],
       [0, 0],
       [0, 0]]]]

Commenti

Disponibilità

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_2_0.

Supporto di Tensor

DML_FEATURE_LEVEL_5_1 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
OutputTensor Output da 2 a 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_4_0 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
OutputTensor Output da 2 a 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
OutputTensor Output 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_0 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
OutputTensor Output 4 FLOAT32, FLOAT16

Requisiti

Requisito Valore
Client minimo supportato Windows 10 versione 2004 (10.0; Build 19041)
Server minimo supportato Windows Server, versione 2004 (10.0; Build 19041)
Intestazione directml.h