Partager via


DML_PADDING1_OPERATOR_DESC structure (directml.h)

Gonfle le tenseur d’entrée avec des valeurs constantes ou mises en miroir sur les bords et écrit le résultat dans la sortie.

Syntaxe

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;
};

Membres

InputTensor

Type : const DML_TENSOR_DESC*

Tenseur contenant les données d’entrée.

OutputTensor

Type : const DML_TENSOR_DESC*

Tenseur contenant les données de sortie. Pour chaque dimension i, OutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i].

PaddingMode

Type : DML_PADDING_MODE*

Mode de remplissage à utiliser lors du remplissage des zones de remplissage.

  • DML_PADDING_MODE_CONSTANT. Utilise une valeur constante unique définie par PaddingValue pour toutes les valeurs de remplissage (voir l’exemple 1).
  • DML_PADDING_MODE_EDGE. Pour chaque dimension, utilisez les valeurs d’arête de cette dimension pour toutes les valeurs de remplissage (voir l’exemple 2).
  • DML_PADDING_MODE_REFLECTION. Mettre en miroir les valeurs du tenseur comme si nous l’avions plié à droite sur les bords, ce qui signifie que les bords ne sont pas mis en miroir. Notez que StartPadding[i] >= InputTensor.Sizes[i], et EndPadding[i] >= InputTensor.Sizes[i] est valide, ce qui signifie que nous pouvons miroir de nouvelles régions de remplissage régulièrement en les pliant sur les régions de remplissage précédentes (voir l’exemple 3).
  • DML_PADDING_MODE_SYMMETRIC. Semblable à DML_PADDING_MODE_REFLECTION, mais les bords sont également mis en miroir. Notez que StartPadding[i] > InputTensor.Sizes[i], et EndPadding[i] > InputTensor.Sizes[i] est valide, ce qui signifie que nous pouvons miroir de nouvelles régions de remplissage régulièrement en les pliant sur les régions de remplissage précédentes (voir l’exemple 4). Ce mode a été introduit au niveau DML_FEATURE_LEVEL_3_0de la fonctionnalité .

PaddingValueDataType

Type : DML_TENSOR_DATA_TYPE

Type de données du membre PaddingValue , qui doit correspondre à OutputTensor.DataType.

PaddingValue

Type : DML_SCALAR_UNION

Valeur de remplissage à utiliser quand PaddingMode == DML_PADDING_MODE_CONSTANT, avec PaddingValueDataType déterminant comment interpréter le champ. Cette valeur est ignorée pour les autres modes de remplissage.

DimensionCount

Type : UINT

Taille des tableaux pointés par StartPadding et EndPadding. Cette valeur doit être la même que le nombre de dimensions de InputTensor et OutputTensor.

StartPadding

Type : _Field_size_(DimensionCount) const UINT*

Tailles des régions de remplissage à ajouter au début de chaque dimension. Pour chaque dimension i, StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i].

EndPadding

Type : _Field_size_(DimensionCount) const UINT*

Tailles des régions de remplissage à ajouter à la fin de chaque dimension. Pour chaque dimension i, EndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i].

Notes

Exemples

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

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

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

Exemple 4 (à partir de 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]]]]

Disponibilité

Cet opérateur a été introduit dans DML_FEATURE_LEVEL_5_0.

Contraintes tensoriels

InputTensor et OutputTensor doivent avoir les mêmes DataType et DimensionCount.

Prise en charge des tenseurs

Tenseur Genre Nombre de dimensions pris en charge Types de données pris en charge
InputTensor Entrée 1 à 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Sortie 1 à 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

Configuration requise

Condition requise Valeur
En-tête directml.h