DML_CUMULATIVE_PRODUCT_OPERATOR_DESC 구조체(directml.h)
축을 따라 텐서의 요소를 곱하여 제품의 실행 중인 집계를 출력 텐서에 기록합니다.
구문
struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
DML_AXIS_DIRECTION AxisDirection;
BOOL HasExclusiveProduct;
};
멤버
InputTensor
형식: const DML_TENSOR_DESC*
입력 데이터를 포함하는 텐서입니다. 일반적으로 전달 패스에서 DML_BATCH_NORMALIZATION_OPERATOR_DESCInputTensor로 제공된 것과 동일한 텐서입니다.
곱할 요소를 포함하는 입력 텐서입니다.
OutputTensor
형식: const DML_TENSOR_DESC*
결과 누적 제품을 쓸 출력 텐서입니다. 이 텐서는 InputTensor와 크기 및 데이터 형식이 동일해야 합니다.
Axis
형식: UINT
요소를 곱할 차원의 인덱스입니다. 이 값은 InputTensor의 DimensionCount보다 작아야 합니다.
AxisDirection
DML_AXIS_DIRECTION 열거형의 값 중 하나입니다. DML_AXIS_DIRECTION_INCREASING 설정하면 요소 인덱스를 오름차순으로 지정된 축을 따라 텐서를 트래버스하여 제품이 발생합니다. DML_AXIS_DIRECTION_DECREASING 설정하면 역방향이 true이고 인덱스를 내림차순으로 요소를 트래버스하여 제품이 발생합니다.
HasExclusiveProduct
형식: BOOL
TRUE이면 실행 중인 집계를 출력 텐서에 쓸 때 현재 요소의 값이 제외됩니다. FALSE이면 현재 요소의 값이 실행 중인 집계에 포함됩니다.
예제
이 섹션의 예제에서는 모두 동일한 입력 텐서를 사용합니다.
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 1, 3, 5],
[3, 8, 7, 3],
[9, 6, 2, 4]]]]
예제 1. 가로 조각의 누적 제품
Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE
OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 2, 6, 30], // i.e. [2, 2*1, 2*1*3, 2*1*3*5]
[3, 24, 168, 504], // [... ]
[9, 54, 108, 432]]]] // [... ]
예제 2. 독점 제품
HasExclusiveProduct를 TRUE로 설정하면 출력 텐서에 쓸 때 실행 중인 집계에서 현재 요소의 값을 제외하는 효과가 있습니다.
Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: TRUE
OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2, 2, 6], // Notice the product is written before multiplying the input,
[1, 3, 24, 168], // and the final total is not written to any output.
[1, 9, 54, 108]]]]
예제 3. 축 방향
AxisDirection을 DML_AXIS_DIRECTION_DECREASING 설정하면 실행 중인 집계를 계산할 때 요소의 순회 순서를 반전시키는 효과가 있습니다.
Axis: 3
AxisDirection: DML_AXIS_DIRECTION_DECREASING
HasExclusiveProduct: FALSE
OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 30, 15, 15, 5], // i.e. [2*1*3*5, 1*3*5, 3*5, 5]
[504, 168, 21, 3], // [... ]
[432, 48, 8, 4]]]] // [... ]
예제 4. 다른 축을 따라 곱하기
이 예제에서 제품은 높이 축(두 번째 차원)을 따라 세로로 발생합니다.
Axis: 2
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE
OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 2, 1, 3, 5], // i.e. [2, ...]
[ 6, 8, 21, 15], // [2*3, ...]
[54, 48, 42, 60]]]] // [2*3*9 ...]
설명
이 연산자는 현재 위치 실행을 지원합니다. 즉, 출력 텐서가 바인딩 중에 InputTensor 의 별칭을 지정하도록 허용됩니다.
가용성
이 연산자는 에서 DML_FEATURE_LEVEL_3_1
도입되었습니다.
텐서 제약 조건
InputTensor 및 OutputTensor 에는 동일한 DataType, DimensionCount 및 크기가 있어야 합니다.
텐서 지원
DML_FEATURE_LEVEL_5_0 이상
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 1-8 | FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32 |
OutputTensor | 출력 | 1-8 | FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32 |
DML_FEATURE_LEVEL_4_0 이상
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 1-8 | FLOAT32, FLOAT16, INT32, UINT32 |
OutputTensor | 출력 | 1-8 | FLOAT32, FLOAT16, INT32, UINT32 |
DML_FEATURE_LEVEL_3_1 이상
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 4 | FLOAT32, FLOAT16, INT32, UINT32 |
OutputTensor | 출력 | 4 | FLOAT32, FLOAT16, INT32, UINT32 |
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 빌드 22000 |
지원되는 최소 서버 | Windows 빌드 22000 |
머리글 | directml.h |