지정된 대각선 범위를 따라 ID와 유사한 행렬을 생성하고 다른 요소는 입력 값 또는 0으로 채워집니다( InputTensor 가 전달되지 않은 경우). 대각선 값은 DiagonalFillBegin 과 DiagonalFillEnd 간에 이동할 수 있습니다. 여기서 0보다 큰 값은 모든 값을 오른쪽으로 이동하고 0보다 작으면 왼쪽으로 이동합니다. 이 생성기 연산자는 모델이 큰 상수 텐서를 저장하지 않도록 하는 데 유용합니다. 마지막 두 개 이전의 선행 차원은 일괄 처리 수로 처리됩니다. 즉, 텐서가 2D 행렬의 스택으로 처리됩니다. 이 연산자는 다음 의사 코드를 수행합니다.
// 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
중요합니다
이 API는 DirectML 독립 실행형 재배포 가능 패키지의 일부로 사용할 수 있습니다( Microsoft.AI.DirectML 버전 1.9 이상 참조). 또한 DirectML 버전 기록 참조하세요.
문법
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;
};
구성원
InputTensor
형식: _Maybenull_ const DML_TENSOR_DESC*
선택적 입력 텐서입니다.
OutputTensor
형식: const DML_TENSOR_DESC*
결과를 쓸 텐서입니다. 차원은 .입니다 { Batch1, Batch2, OutputHeight, OutputWidth }
. 높이와 너비는 정사각형일 필요가 없습니다.
ValueDataType
OutputTensor::D ataType과 일치해야 하는 Value 멤버의 데이터 형식입니다.
Value
형식: DML_SCALAR_UNION
멤버를 해석하는 방법을 결정하는 ValueDataType 을 사용하여 출력을 채울 상수 값입니다.
DiagonalFillBegin
형식: INT
값으로 채울 범위의 하한(포함 시작)입니다. 시작과 끝이 반전되면(시작 > 끝) 채우기가 반전됩니다.
DiagonalFillEnd
형식: INT
값으로 채울 범위의 상한(제외 종료)입니다. 시작과 끝이 반전되면(시작 > 끝) 채우기가 반전됩니다.
예시
기본 ID 매트릭스:
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]]
3 요소 넓은 대각선 스트립을 채웁니다.
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]]
오른쪽 위 대각선 반쪽(엄격하게 위쪽 삼각형)을 유지하여 왼쪽 아래를 0으로 유지합니다.
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]]
대각선을 따라 값만 유지하고 다른 모든 값은 0으로 유지합니다.
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]]
비고
이 연산자는 DiagonalFillBegin이 DML_OPERATOR_DIAGONAL_MATRIX::Offset으로 설정되고 DiagonalFillEnd가 DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1로 설정된 경우 DML_DIAGONAL_MATRIX_OPERATOR_DESC 동일합니다.
가용도
이 연산자는 DML_FEATURE_LEVEL_5_1 도입되었습니다.
Tensor 제약 조건
InputTensor 및 OutputTensor 에는 동일한 DataType 및 DimensionCount가 있어야 합니다.
Tensor 지원
텐서 | 친절한 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
입력 텐서 | 선택적 입력 | 2 ~4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
출력텐서 | 출력 | 2 ~4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
요구 사항
머리글 | directml.h |