다음을 통해 공유


DML_FOLD_OPERATOR_DESC 구조체(directml.h)

슬라이딩 윈도우에서 형성된 패치 배열을 포함하는 대형 텐서로 결합합니다.

슬라이딩 로컬 블록(예: 이미지 패치, 셰이프(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 제약 조건

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

Tensor 지원

텐서 친절한 지원되는 차원 수 지원되는 데이터 형식
입력 텐서 입력 3~8
출력텐서 출력 3~8

요구 사항

   
머리글 directml.h