Partilhar via


DML_DIAGONAL_MATRIX1_OPERATOR_DESC estrutura (directml.h)

Gera uma matriz semelhante a uma identidade com uns (ou outro valor explícito) ao longo da extensão diagonal dada, com outros elementos sendo preenchidos com os valores de entrada ou zeros (se nenhum InputTensor for passado). Os valores diagonais podem ser deslocados para qualquer lugar entre DiagonalFillBegin e DiagonalFillEnd, onde um valor maior que zero desloca todos os valores para a direita e menor que zero os desloca para a esquerda. Este operador de gerador é útil para modelos para evitar o armazenamento de um grande tensor constante. Quaisquer dimensões à esquerda antes das duas últimas são tratadas como uma contagem de lotes, o que significa que o tensor é tratado como pilha de matrizes 2D. Este operador executa o seguinte pseudocódigo:

// Given each current coordinate's x, figure out the corresponding x on the top (0th) row.
// Then fill it with Value if that x coordinate is either within the fill bounds, or outside
// the fill bounds when inverted. Otherwise, use the original input value or zero.

for each coordinate in OutputTensor
    topX = coordinate.x - coordinate.y
    useValue = (DiagonalFillEnd >= DiagonalFillBegin) ^ (topX >= DiagonalFillBegin) ^ (topX < DiagonalFillEnd)
    OutputTensor[coordinate] = if useValue then Value
                               else if InputTensor not null then InputTensor[coordinate]
                               else 0
endfor

Importante

Essa API está disponível como parte do pacote redistribuível autônomo do DirectML (consulte Microsoft.AI.DirectML versão 1.9 e posterior. Consulte também o histórico de versões do DirectML.

Sintaxe

struct DML_DIAGONAL_MATRIX1_OPERATOR_DESC
{
    _Maybenull_ const DML_TENSOR_DESC* InputTensor;
    const DML_TENSOR_DESC* OutputTensor;
    DML_TENSOR_DATA_TYPE ValueDataType;
    DML_SCALAR_UNION Value;
    INT DiagonalFillBegin;
    INT DiagonalFillEnd;
};

Membros

InputTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Um tensor de entrada opcional.

OutputTensor

Tipo: const DML_TENSOR_DESC*

O tensor para escrever os resultados. As dimensões são { Batch1, Batch2, OutputHeight, OutputWidth }. A altura e a largura não precisam ser quadradas.

ValueDataType

Tipo: DML_TENSOR_DATA_TYPE

O tipo de dados do membro Value , que deve corresponder a OutputTensor::D ataType.

Value

Tipo: DML_SCALAR_UNION

Um valor constante para preencher a saída, com ValueDataType determinando como interpretar o membro.

DiagonalFillBegin

Tipo: INT

O limite inferior (início inclusive) do intervalo a ser preenchido com Valor. Se o início e o fim estiverem invertidos (início > do fim), o preenchimento será invertido.

DiagonalFillEnd

Tipo: INT

O limite superior (exclusivo final) do intervalo a preencher com Valor. Se o início e o fim estiverem invertidos (início > do fim), o preenchimento será invertido.

Exemplos

Matriz de identidade padrão:

InputTensor: none
ValueDataType: FLOAT32
Value: 7
DiagonalFillBegin: 0
DiagonalFillEnd: 1
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[1, 0, 0, 0, 0],
     [0, 1, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 1, 0]]

Preencha uma faixa diagonal de 3 elementos de largura:

InputTensor: none
ValueDataType: FLOAT32
Value: 7
DiagonalFillBegin: 0
DiagonalFillEnd: 3
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[7, 7, 7, 0, 0],
     [0, 7, 7, 7, 0],
     [0, 0, 7, 7, 7],
     [0, 0, 0, 7, 7]]

Mantenha a metade diagonal superior direita (o triângulo estritamente superior), zerando a parte inferior esquerda.

InputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 7, 3, 7, 9],
     [1, 2, 8, 6, 9],
     [9, 4, 1, 8, 7],
     [4, 3, 4, 2, 4]]
ValueDataType: FLOAT32
Value: 0
DiagonalFillBegin: INT32_MIN
DiagonalFillEnd: 1
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[0, 7, 3, 7, 9],
     [0, 0, 8, 6, 9],
     [0, 0, 0, 8, 7],
     [0, 0, 0, 0, 4]]

Mantenha apenas os valores ao longo da diagonal, zerando todos os outros.

InputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 7, 3, 7, 9],
     [1, 2, 8, 6, 9],
     [9, 4, 1, 8, 7],
     [4, 3, 4, 2, 4]]
ValueDataType: FLOAT32
Value: 0
DiagonalFillBegin: 1
DiagonalFillEnd: 0
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 0, 0, 0, 0],
     [0, 2, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 2, 0]]

Observações

Este operador é equivalente a DML_DIAGONAL_MATRIX_OPERATOR_DESC quando DiagonalFillBegin é definido como DML_OPERATOR_DIAGONAL_MATRIX::Offset e DiagonalFillEnd é definido como DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1.

Disponibilidade

Este operador foi introduzido em DML_FEATURE_LEVEL_5_1.

Restrições de tensores

InputTensor e OutputTensor devem ter o mesmo DataType e DimensionCount.

Suporte tensor

Tensor Amável Contagens de dimensões suportadas Tipos de dados suportados
InputTensor Entrada opcional 2 a 4 anos FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Resultado 2 a 4 anos FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

Requerimentos

   
Cabeçalho DirectML.H