DML_PADDING_OPERATOR_DESC 構造体 (directml.h)
エッジに定数またはミラー化された値を持つ入力テンソルを拡張し、結果を出力に書き込みます。
構文
struct DML_PADDING_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputTensor;
DML_PADDING_MODE PaddingMode;
FLOAT PaddingValue;
UINT DimensionCount;
const UINT *StartPadding;
const UINT *EndPadding;
};
メンバー
InputTensor
型: const DML_TENSOR_DESC*
入力データを含むテンソル。
OutputTensor
型: const DML_TENSOR_DESC*
出力データを含むテンソル。 各ディメンション i
について、 OutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i]
。
PaddingMode
種類: DML_PADDING_MODE
埋め込み領域を埋めるときに使用するパディング モード。
- DML_PADDING_MODE_CONSTANT。 すべてのパディング値に 対して PaddingValue で定義された 1 つの定数値を使用します ( 例 1 を参照)。
- DML_PADDING_MODE_EDGE。 各ディメンションについて、すべてのパディング値に対してそのディメンションのエッジ値を使用します ( 例 2 を参照)。
- DML_PADDING_MODE_REFLECTION。 テンソルの値をエッジ上で折りたたんだかのようにミラー化します。つまり、エッジはミラー化されません。
StartPadding[i] >= InputTensor.Sizes[i]
EndPadding[i] >= InputTensor.Sizes[i]
、 は有効です。つまり、新しいパディング領域を以前のパディング領域に折りたたむことで定期的にミラーできます (例 3 を参照)。 - DML_PADDING_MODE_SYMMETRIC。 DML_PADDING_MODE_REFLECTIONに似ていますが、エッジもミラー化されます。
StartPadding[i] > InputTensor.Sizes[i]
EndPadding[i] > InputTensor.Sizes[i]
、 は有効です。つまり、新しいパディング領域を定期的にミラーし、前のパディング領域に折りたたむことができます (例 4 を参照)。 このモードは、機能レベルDML_FEATURE_LEVEL_3_0
で導入されました。
PaddingValue
型: FLOAT
の場合 PaddingMode == DML_PADDING_MODE_CONSTANT
に使用する埋め込み値。 この値は、他のパディング モードでは無視されます。 テンソルの DataType が DML_TENSOR_DATA_TYPE_FLOAT16 または DML_TENSOR_DATA_TYPE_FLOAT32されていない場合、値が切り捨てられる可能性があることに注意してください (たとえば、10.6 は 10 になります)。
DimensionCount
型: UINT
StartPadding と EndPadding が指す配列のサイズ。 この値は、 InputTensor と OutputTensor のディメンション数と同じ値である必要があります。
StartPadding
型: _Field_size_(DimensionCount) const UINT*
各ディメンションの先頭に追加するパディング領域のサイズ。 各ディメンション i
について、 StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i]
。
EndPadding
型: _Field_size_(DimensionCount) const UINT*
各ディメンションの末尾に追加するパディング領域のサイズ。 各ディメンション i
について、 EndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i]
。
例
例 1
PaddingMode: DML_PADDING_MODE_CONSTANT
PaddingValue: 9
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}
InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
[5, 6, 7, 8],
[1, 2, 3, 4],
[5, 6, 7, 8]]]]
OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
[9, 9, 1, 2, 3, 4, 9, 9, 9, 9],
[9, 9, 5, 6, 7, 8, 9, 9, 9, 9],
[9, 9, 1, 2, 3, 4, 9, 9, 9, 9],
[9, 9, 5, 6, 7, 8, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]]]]
例 2
PaddingMode: DML_PADDING_MODE_EDGE
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}
InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
[5, 6, 7, 8],
[1, 2, 3, 4],
[5, 6, 7, 8]]]]
OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[1, 1, 1, 2, 3, 4, 4, 4, 4, 4]
[1, 1, 1, 2, 3, 4, 4, 4, 4, 4],
[5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
[1, 1, 1, 2, 3, 4, 4, 4, 4, 4],
[5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
[5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
[5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
[5, 5, 5, 6, 7, 8, 8, 8, 8, 8]]]]
例 3
PaddingMode: DML_PADDING_MODE_REFLECTION
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}
InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
[5, 6, 7, 8],
[1, 2, 3, 4],
[5, 6, 7, 8]]]]
OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[7, 6, 5, 6, 7, 8, 7, 6, 5, 6]
[3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
[7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
[3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
[7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
[3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
[7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
[3, 2, 1, 2, 3, 4, 3, 2, 1, 2]]]]
例 4 (以降 DML_FEATURE_LEVEL_3_0
)
PaddingMode: DML_PADDING_MODE_SYMMETRIC
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}
InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
[5, 6, 7, 8],
[1, 2, 3, 4],
[5, 6, 7, 8]]]]
OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[2, 1, 1, 2, 3, 4, 4, 3, 2, 1]
[2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
[6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
[2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
[6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
[6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
[2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
[6, 5, 5, 6, 7, 8, 8, 7, 6, 5]]]]
可用性
この演算子は、 で DML_FEATURE_LEVEL_1_0
導入されました。
テンソル制約
InputTensor と OutputTensor には、同じ DataType と DimensionCount が必要です。
Tensor のサポート
DML_FEATURE_LEVEL_5_0 以降
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensor | 入力 | 1 から 8 | FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8 |
OutputTensor | 出力 | 1 から 8 | FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8 |
DML_FEATURE_LEVEL_3_1以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensor | 入力 | 1 から 8 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputTensor | 出力 | 1 から 8 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
DML_FEATURE_LEVEL_2_1以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensor | 入力 | 4 から 5 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputTensor | 出力 | 4 から 5 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
DML_FEATURE_LEVEL_1_0以降
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensor | 入力 | 4 から 5 | FLOAT32、FLOAT16 |
OutputTensor | 出力 | 4 から 5 | FLOAT32、FLOAT16 |
要件
Header | directml.h |