共用方式為


DML_UNFOLD_OPERATOR_DESC結構 (directml.h)

從批次輸入張量擷取滑動本機區塊。

請考慮具有圖形 (N,C,*) 的 InputTensor,其中 * 是任意數目的空間維度 (<=6)。 作業會將 InputTensor 內每個滑動的 WindowSize'd 區塊扁平化為 OutputTensor 的數據行。 OutputTensor 是一個包含滑動本機區塊的 3D 張量,例如圖形 (N,C×∏(WindowSizes),BlockCount),其中 N 是批次維度,C×∏(WindowSizes) 是視窗內的值數目(視窗有∏(WindowSizes)空間位置,而 BlockCount 是區塊總數。 自變數必須滿足:

BlocksPerDimension[d] = ( SpatialSize[d] + StartPadding[d] + EndPadding[d] - Dilations[d] * (WindowSizes[d] - 1) - 1 ) / stride[d] ) + 1

塊數 = ∏d 個塊數PerDimension[d]

地點:

  • SpatialSize 是由輸入的空間維度所組成 。
  • <0 = d < 維度計數

在最後一個維度的索引輸出 (資料行維度) 會提供特定區塊內的所有值。

StartPadding、EndPadding、Strides 和 Dilations 自變數會指定如何擷取滑動區塊。

這很重要

此 API 可作為 DirectML 獨立可轉散發套件的一部分(請參閱 Microsoft.AI.DirectML 1.15.1 版和更新版本。 另請參閱 DirectML 版本歷程記錄。

語法

struct DML_UNFOLD_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 必須位於 範圍 [1, 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 每個空間維度開頭的隱含零填補量。 開始填補來源張量。

EndPadding

類型:_Field_size_(DimensionCount) const UINT*

陣列,其中包含要套用至 InputTensor 每個空間維度結尾的隱含零填補量。 來源張量結束填補。

範例

範例 1。

1 通道展開。

InputTensor: (Sizes:{1, 1, 5, 5}, 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.]]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {0, 0}
EndPadding: {0, 0}
OutputTensor: (Sizes:{1, 9, 9}, DataType:FLOAT32)
[[[ 0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12.],
  [ 1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13.],
  [ 2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14.],
  [ 5.,  6.,  7., 10., 11., 12., 15., 16., 17.],
  [ 6.,  7.,  8., 11., 12., 13., 16., 17., 18.],
  [ 7.,  8.,  9., 12., 13., 14., 17., 18., 19.],
  [10., 11., 12., 15., 16., 17., 20., 21., 22.],
  [11., 12., 13., 16., 17., 18., 21., 22., 23.],
  [12., 13., 14., 17., 18., 19., 22., 23., 24.]]]

範例 2.

1 通道,邊框間距折疊。

InputTensor: (Sizes:{1, 1, 5, 5}, 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.]]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 9, 15}, DataType:FLOAT32)
[[[ 0.,  0.,  0.,  0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12., 15., 16., 17.],
  [ 0.,  0.,  0.,  1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13., 16., 17., 18.],
  [ 0.,  0.,  0.,  2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14., 17., 18., 19.],
  [ 0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12., 15., 16., 17., 20., 21., 22.],
  [ 1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13., 16., 17., 18., 21., 22., 23.],
  [ 2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14., 17., 18., 19., 22., 23., 24.],
  [ 5.,  6.,  7., 10., 11., 12., 15., 16., 17., 20., 21., 22.,  0.,  0., 0.],
  [ 6.,  7.,  8., 11., 12., 13., 16., 17., 18., 21., 22., 23.,  0.,  0., 0.],
  [ 7.,  8.,  9., 12., 13., 14., 17., 18., 19., 22., 23., 24.,  0.,  0., 0.]]]

可用性

此運算子是在 DML_FEATURE_LEVEL_6_4 中引進的。

Tensor 條件約束

InputTensorOutputTensor 必須具有相同 的 DimensionCount

Tensor 支援

張量 仁慈 (if context refers to kindness) 支援的維度計數 支援的數據類型
InputTensor 的 輸入 3 到 8
OutputTensor 輸出 3 到 8

需求

   
頁眉 directml.h