スライディング ウィンドウから形成されたパッチの配列を、テンソルを含む大きなパッチに結合します。
画像のパッチ(N、C×∏(WindowSizes)、BlockCount)、Nはバッチディメンション、C×∏(WindowSizes)はウィンドウ内の値の数(ウィンドウにはCチャネルベクトルを含む∏(WindowSizes))空間位置)、BlockCountはブロックの合計数など、スライディングローカルブロックを含むバッチ入力テンソルを考えてみましょう。 この操作では、重複する値を合計して、これらのローカル ブロックを大きな出力テンソル (N,C,OutputSize[0],OutputSize[1],...) に結合します。 引数は次の条件を満たす必要があります。
BlocksPerDimension[d] = ( ( SpatialSize[d] + StartPadding[d] + EndPadding[d] - Dilations[d] * (WindowSizes[d] - 1) - 1 ) / stride[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 の各空間ディメンションの先頭に適用される暗黙的なゼロパディングの量を含む配列。 ソース テンソルのパディングを開始します。
EndPadding
型: _Field_size_(DimensionCount) const UINT*
InputTensor の各空間ディメンションの末尾に適用される暗黙的なゼロパディングの量を含む配列。 ソース テンソルの埋め込みを終了します。
例示
例 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 |