DML_PADDING1_OPERATOR_DESC 構造体 (directml.h)
エッジに定数またはミラー化された値を持つ入力テンソルを拡張し、結果を出力に書き込みます。
構文
struct DML_PADDING1_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputTensor;
DML_PADDING_MODE PaddingMode;
DML_TENSOR_DATA_TYPE PaddingValueDataType;
DML_SCALAR_UNION 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
で導入されました。
PaddingValueDataType
PaddingValue メンバーのデータ型。OutputTensor.DataType と一致する必要があります。
PaddingValue
種類: DML_SCALAR_UNION
フィールドの解釈方法を決定する PaddingValueDataType を使用して、 の場合PaddingMode == DML_PADDING_MODE_CONSTANT
に使用する埋め込み値。 この値は、他のパディング モードでは無視されます。
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
PaddingValueDataType: FLOAT32
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
PaddingValueDataType: FLOAT32
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
PaddingValueDataType: FLOAT32
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
PaddingValueDataType: FLOAT32
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_5_0で導入されました。
テンソル制約
InputTensor と OutputTensor には、同じ DataType と DimensionCount が必要です。
Tensor のサポート
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
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 |
要件
要件 | 値 |
---|---|
Header | directml.h |