從批次輸入張量擷取滑動本機區塊。
請考慮具有圖形 (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 條件約束
InputTensor 和 OutputTensor 必須具有相同 的 DimensionCount。
Tensor 支援
| 張量 | 仁慈 (if context refers to kindness) | 支援的維度計數 | 支援的數據類型 |
|---|---|---|---|
| InputTensor 的 | 輸入 | 3 到 8 | |
| OutputTensor | 輸出 | 3 到 8 |
需求
| 頁眉 | directml.h |