슬라이딩 윈도우에서 형성된 패치 배열을 포함하는 대형 텐서로 결합합니다.
슬라이딩 로컬 블록(예: 이미지 패치, 셰이프(N,C×∏(WindowSizes),BlockCount)을 포함하는 일괄 처리 입력 텐서를 고려합니다. 여기서 N은 일괄 처리 차원이고, C×∏(WindowSizes)는 창 내의 값 수(창에는 각각 C 채널 벡터가 포함된 ∏(WindowSizes) 공간 위치가 있음)이며 BlockCount는 총 블록 수입니다. 이 작업은 겹치는 값을 합산하여 이러한 로컬 블록을 셰이프의 큰 출력 텐서(N,C,OutputSize[0],OutputSize[1],...)로 결합합니다. 인수는 다음을 충족해야 합니다.
BlocksPerDimension[d] = ( ( SpatialSize[d] + StartPadding[d] + EndPadding[d] - 팽창[d] * (WindowSizes[d] - 1) - 1 ) / 보폭[d] ) + 1
BlockCount = ∏d BlocksPerDimension[d]
위치:
- <0 = d < 차원 수
OutputSize(OutputTensor의 크기)는 슬라이딩 로컬 블록의 큰 포함 텐서의 공간 모양을 설명합니다.
StartPadding, EndPadding, Strides 및 Dilations 인수는 슬라이딩 블록을 검색하는 방법을 지정합니다.
중요합니다
이 API는 DirectML 독립 실행형 재배포 가능 패키지의 일부로 사용할 수 있습니다( Microsoft.AI.DirectML 버전 1.15.1 이상 참조). 또한 DirectML 버전 기록 참조하세요.
문법
struct DML_FOLD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* WindowSizes;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* Dilations;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
};
구성원
InputTensor
형식: const DML_TENSOR_DESC*
읽을 입력 텐서입니다.
OutputTensor
형식: const DML_TENSOR_DESC*
결과를 쓸 출력 텐서입니다.
DimensionCount
형식: UINT
InputTensor의 공간 차원입니다. DimensionCount 는 = 6이어야 <합니다.
WindowSizes
형식: _Field_size_(DimensionCount) const UINT*
슬라이딩 윈도우의 크기입니다. 추출된 패치의 크기입니다.
Strides
형식: _Field_size_(DimensionCount) const UINT*
입력 공간 차원의 슬라이딩 윈도우( WindowSizes 차원 포함)의 보폭입니다. DML_TENSOR_DESC 포함된 텐서 보폭과는 별개입니다. 추출된 패치의 단계 크기입니다.
Dilations
형식: _Field_size_(DimensionCount) const UINT*
커널 점 사이의 공간을 크기 조정하여 입력 공간 차원의 슬라이딩 윈도우( WindowSizes 차원 포함)의 확장입니다. 추출된 패치의 팽창입니다.
StartPadding
형식: _Field_size_(DimensionCount) const UINT*
InputTensor의 각 공간 차원의 시작 부분에 적용할 암시적 0 패딩의 양을 포함하는 배열입니다. 원본 텐서의 안쪽 여백을 시작합니다.
EndPadding
형식: _Field_size_(DimensionCount) const UINT*
InputTensor의 각 공간 차원 끝에 적용할 암시적 0 패딩의 양을 포함하는 배열입니다. 원본 텐서의 끝 안쪽 여백입니다.
예시
예제 1
1 채널 접기입니다.
InputTensor: (Sizes:{1, 9, 4}, DataType:FLOAT32)
[[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[12., 13., 14., 15.],
[16., 17., 18., 19.],
[20., 21., 22., 23.],
[24., 25., 26., 27.],
[28., 29., 30., 31.],
[32., 33., 34., 35.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {0, 0}
EndPadding: {0, 0}
OutputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[ 0., 5., 13., 9.],
[ 14., 38., 54., 32.],
[ 38., 86., 102., 56.],
[ 26., 57., 65., 35.]]]]
예제 2
1 채널, 패딩 접기.
InputTensor: (Sizes:{1, 9, 8}, DataType:FLOAT32)
[[[ 0., 1., 2., 3., 4., 5., 6., 7.],
[ 8., 9., 10., 11., 12., 13., 14., 15.],
[16., 17., 18., 19., 20., 21., 22., 23.],
[24., 25., 26., 27., 28., 29., 30., 31.],
[32., 33., 34., 35., 36., 37., 38., 39.],
[40., 41., 42., 43., 44., 45., 46., 47.],
[48., 49., 50., 51., 52., 53., 54., 55.],
[56., 57., 58., 59., 60., 61., 62., 63.],
[64., 65., 66., 67., 68., 69., 70., 71.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[ 26., 70., 102., 60.],
[ 78., 183., 231., 129.],
[ 84., 195., 243., 135.],
[ 82., 182., 214., 116.]]]]
예제 3
패딩된 2 채널 접기입니다.
InputTensor: (Sizes:{1, 18, 8}, DataType:FLOAT32)
[[[ 0., 1., 2., 3., 4., 5., 6., 7.],
[ 8., 9., 10., 11., 12., 13., 14., 15.],
[ 16., 17., 18., 19., 20., 21., 22., 23.],
[ 24., 25., 26., 27., 28., 29., 30., 31.],
[ 32., 33., 34., 35., 36., 37., 38., 39.],
[ 40., 41., 42., 43., 44., 45., 46., 47.],
[ 48., 49., 50., 51., 52., 53., 54., 55.],
[ 56., 57., 58., 59., 60., 61., 62., 63.],
[ 64., 65., 66., 67., 68., 69., 70., 71.],
[ 72., 73., 74., 75., 76., 77., 78., 79.],
[ 80., 81., 82., 83., 84., 85., 86., 87.],
[ 88., 89., 90., 91., 92., 93., 94., 95.],
[ 96., 97., 98., 99., 100., 101., 102., 103.],
[104., 105., 106., 107., 108., 109., 110., 111.],
[112., 113., 114., 115., 116., 117., 118., 119.],
[120., 121., 122., 123., 124., 125., 126., 127.],
[128., 129., 130., 131., 132., 133., 134., 135.],
[136., 137., 138., 139., 140., 141., 142., 143.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 2, 4, 4}, DataType:FLOAT32)
[[[[ 26., 70., 102., 60.],
[ 78., 183., 231., 129.],
[ 84., 195., 243., 135.],
[ 82., 182., 214., 116.]],
[[170., 358., 390., 204.],
[294., 615., 663., 345.],
[300., 627., 675., 351.],
[226., 470., 502., 260.]]]]
가용도
이 연산자는 DML_FEATURE_LEVEL_6_4 도입되었습니다.
Tensor 제약 조건
InputTensor 및 OutputTensor 에는 동일한 DimensionCount가 있어야 합니다.
Tensor 지원
| 텐서 | 친절한 | 지원되는 차원 수 | 지원되는 데이터 형식 |
|---|---|---|---|
| 입력 텐서 | 입력 | 3~8 | |
| 출력텐서 | 출력 | 3~8 |
요구 사항
| 머리글 | directml.h |