共用方式為


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) 。
  • 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

類型: DML_TENSOR_DATA_TYPE

PaddingValue 成員的數據類型,必須符合 OutputTensor.DataType

PaddingValue

類型: DML_SCALAR_UNION

當 時 PaddingMode == DML_PADDING_MODE_CONSTANT要使用的填補值,以及 PaddingValueDataType 決定如何解譯字段。 其他填補模式會忽略此值。

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]]]]

從 DML_FEATURE_LEVEL_3_0) 開始的範例 4 (

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 中引進的。

Tensor 條件約束

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

規格需求

需求
標頭 directml.h