次の方法で共有


DML_UNFOLD_OPERATOR_DESC構造体 (directml.h)

バッチ入力テンソルからスライディング ローカル ブロックを抽出します。

図形 (N,C,*) を持つ InputTensor について考えてみましょう。ここで、* は任意の数の空間ディメンション (<=6) です。 この操作により、InputTensor 内の各スライディング WindowSize のブロックが OutputTensor の列にフラット化されます。 OutputTensor は、画像のパッチ、形状 (N、C×∏(WindowSizes)、BlockCount) のスライディング ローカル ブロックを含む 3D テンソルです。N はバッチ ディメンション、C×∏(WindowSizes) は、ウィンドウ内の値の数です (ウィンドウには、それぞれ C チャネル ベクターを含む ∏(WindowSizes) 空間位置があります)、BlockCount はブロックの合計数です。 引数は次の条件を満たす必要があります。

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

BlockCount = ∏d BlocksPerDimension[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 のサポート

テンソル 優しい サポートされているディメンション数 サポートされているデータ型
インプットテンソル インプット 3 ~ 8
出力テンソル アウトプット 3 ~ 8

要求事項

   
ヘッダ directml.h