Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Gera uma matriz semelhante a uma identidade com um (ou outro valor explícito) ao longo do intervalo diagonal fornecido, com outros elementos sendo preenchidos com os valores de entrada ou zeros (se nenhum InputTensor for passado). Os valores diagonais podem ser deslocados em qualquer lugar entre DiagonalFillBegin e DiagonalFillEnd, em que um valor maior que zero desloca todos os valores para a direita e menos de zero os desloca para a esquerda. Esse operador gerador é útil para modelos para evitar o armazenamento de um tensor de constante grande. Todas as dimensões principais antes das duas últimas são tratadas como uma contagem em lotes, o que significa que o tensor é tratado como pilha de matrizes 2D. Esse 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 de 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 o qual gravar 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 (começando inclusive) do intervalo a ser preenchido com Valor. Se o início e o término estiverem invertidos (fim de início > ), o preenchimento será invertido.
DiagonalFillEnd
Tipo: INT
O limite superior (final exclusivo) do intervalo a ser preenchido com Valor. Se o início e o término estiverem invertidos (fim de início > ), 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), bloqueando 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, bloqueando 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
Esse 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
Esse operador foi introduzido no DML_FEATURE_LEVEL_5_1.
Restrições do Tensor
InputTensor e OutputTensor devem ter o mesmo DataType e DimensionCount.
Suporte ao Tensor
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
Tensor de entrada | Entrada opcional | 2 a 4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
Tensor de saída | Saída | 2 a 4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
Requisitos
cabeçalho | directml.h |