Condividi tramite


struttura DML_CUMULATIVE_PRODUCT_OPERATOR_DESC (directml.h)

Moltiplica gli elementi di un tensore lungo un asse, scrivendo il conteggio in esecuzione del prodotto nel tensore di output.

Sintassi

struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
  DML_AXIS_DIRECTION    AxisDirection;
  BOOL                  HasExclusiveProduct;
};

Members

InputTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente i dati di input. Si tratta in genere dello stesso tensore fornito come InputTensor per DML_BATCH_NORMALIZATION_OPERATOR_DESC nel passaggio avanti.

Tensore di input contenente elementi da moltiplicare.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensore di output in cui scrivere i prodotti cumulativi risultanti. Questo tensore deve avere le stesse dimensioni e il tipo di dati di InputTensor.

Axis

Tipo: UINT

Indice della dimensione per moltiplicare gli elementi. Questo valore deve essere minore di DimensionCountdell'oggetto InputTensor.

AxisDirection

Tipo: DML_AXIS_DIRECTION

Uno dei valori dell'enumerazione DML_AXIS_DIRECTION . Se impostato su DML_AXIS_DIRECTION_INCREASING, il prodotto si verifica attraversando il tensore lungo l'asse specificato tramite l'indice degli elementi crescente. Se impostato su DML_AXIS_DIRECTION_DECREASING, il valore inverso è true e il prodotto si verifica attraversando gli elementi in base all'indice decrescente.

HasExclusiveProduct

Tipo: BOOL

Se TRUE, il valore dell'elemento corrente viene escluso durante la scrittura del conteggio in esecuzione nel tensore di output. Se FALSE, il valore dell'elemento corrente viene incluso nel conteggio in esecuzione.

Esempio

Gli esempi in questa sezione usano tutti lo stesso tensore di input.

InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 1, 3, 5],
   [3, 8, 7, 3],
   [9, 6, 2, 4]]]]

Esempio 1. Prodotto cumulativo tra slivers orizzontali

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2,  2,   6,  30],       // i.e. [2, 2*1, 2*1*3, 2*1*3*5]
   [3, 24, 168, 504],       //      [...                   ]
   [9, 54, 108, 432]]]]     //      [...                   ]

Esempio 2. Prodotti esclusivi

L'impostazione di HasExclusiveProduct su TRUE ha l'effetto di escludere il valore dell'elemento corrente dal conteggio in esecuzione durante la scrittura nel tensore di output.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: TRUE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2,  2,   6],      // Notice the product is written before multiplying the input,
   [1, 3, 24, 168],      // and the final total is not written to any output.
   [1, 9, 54, 108]]]]

Esempio 3. Direzione dell'asse

L'impostazione di AxisDirection su DML_AXIS_DIRECTION_DECREASING ha l'effetto di invertire l'ordine di attraversamento degli elementi durante il calcolo del tally in esecuzione.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_DECREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 30,  15, 15, 5],    // i.e. [2*1*3*5, 1*3*5, 3*5, 5]
   [504, 168, 21, 3],    //      [...                   ]
   [432,  48,  8, 4]]]]  //      [...                   ]

Esempio 4. Moltiplicazione lungo un asse diverso

In questo esempio il prodotto si verifica verticalmente lungo l'asse dell'altezza (seconda dimensione).

Axis: 2
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 2,  1,  3,  5],   // i.e. [2,    ...]
   [ 6,  8, 21, 15],   //      [2*3,  ...]
   [54, 48, 42, 60]]]] //      [2*3*9 ...]

Commenti

Questo operatore supporta l'esecuzione sul posto, vale a dire che il tensore di output è autorizzato ad alias InputTensor durante l'associazione.

Disponibilità

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_3_1.

Vincoli tensor

InputTensor e OutputTensor devono avere gli stessi Valori DataType, DimensionCount e Size.

Supporto di Tensor

DML_FEATURE_LEVEL_5_0 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
InputTensor Input da 1 a 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32
OutputTensor Output da 1 a 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_4_0 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
InputTensor Input da 1 a 8 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Output da 1 a 8 FLOAT32, FLOAT16, INT32, UINT32

DML_FEATURE_LEVEL_3_1 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
InputTensor Input 4 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Output 4 FLOAT32, FLOAT16, INT32, UINT32

Requisiti

Requisito Valore
Client minimo supportato Windows Build 22000
Server minimo supportato Windows Build 22000
Intestazione directml.h