次の方法で共有


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*

出力データを含むテンソル。 各ディメンション iOutputTensor.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で導入されました

PaddingValueDataType

種類: DML_TENSOR_DATA_TYPE

PaddingValue メンバーのデータ型。OutputTensor.DataType と一致する必要があります。

PaddingValue

種類: DML_SCALAR_UNION

フィールドの解釈方法を決定する PaddingValueDataType を使用して、 の場合PaddingMode == DML_PADDING_MODE_CONSTANTに使用する埋め込み値。 この値は、他のパディング モードでは無視されます。

DimensionCount

型: UINT

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

StartPadding

型: _Field_size_(DimensionCount) const UINT*

各ディメンションの先頭に追加するパディング領域のサイズ。 各ディメンション iStartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i]に対して。

EndPadding

型: _Field_size_(DimensionCount) const UINT*

各ディメンションの末尾に追加するパディング領域のサイズ。 各ディメンション iEndPadding[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で導入されました。

テンソル制約

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

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