다음을 통해 공유


DML_DIAGONAL_MATRIX1_OPERATOR_DESC 구조체(directml.h)

지정된 대각선 범위를 따라 ID와 유사한 행렬을 생성하고 다른 요소는 입력 값 또는 0으로 채워집니다( InputTensor 가 전달되지 않은 경우). 대각선 값은 DiagonalFillBeginDiagonalFillEnd 간에 이동할 수 있습니다. 여기서 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

형식: DML_TENSOR_DATA_TYPE

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]]

비고

이 연산자는 DiagonalFillBeginDML_OPERATOR_DIAGONAL_MATRIX::Offset으로 설정되고 DiagonalFillEnd가 DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1로 설정된 경우 DML_DIAGONAL_MATRIX_OPERATOR_DESC 동일합니다.

가용도

이 연산자는 DML_FEATURE_LEVEL_5_1 도입되었습니다.

Tensor 제약 조건

InputTensorOutputTensor 에는 동일한 DataTypeDimensionCount가 있어야 합니다.

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