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_SYMMETRICDML_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に使用する埋め込み値。 この値は、他のパディング モードでは無視されます。 テンソルの DataTypeDML_TENSOR_DATA_TYPE_FLOAT16 または DML_TENSOR_DATA_TYPE_FLOAT32されていない場合、値が切り捨てられる可能性があることに注意してください (たとえば、10.6 は 10 になります)。

DimensionCount

型: UINT

StartPaddingEndPadding が指す配列のサイズ。 この値は、 InputTensorOutputTensor のディメンション数と同じ値である必要があります。

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導入されました。

テンソル制約

InputTensorOutputTensor には、同じ DataTypeDimensionCount が必要です。

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