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 |