Compartir a través de


estructura DML_CUMULATIVE_PRODUCT_OPERATOR_DESC (directml.h)

Multiplica los elementos de un tensor a lo largo de un eje, escribiendo el recuento de ejecución del producto en el tensor de salida.

Sintaxis

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

Miembros

InputTensor

Tipo: const DML_TENSOR_DESC*

Tensor que contiene los datos de entrada. Normalmente, este es el mismo tensor que se proporcionó como InputTensor para DML_BATCH_NORMALIZATION_OPERATOR_DESC en el pase hacia delante.

Tensor de entrada que contiene elementos que se van a multiplicar.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensor de salida en el que se van a escribir los productos acumulativos resultantes. Este tensor debe tener los mismos tamaños y tipo de datos que InputTensor.

Axis

Tipo: UINT

Índice de la dimensión que se va a multiplicar los elementos. Este valor debe ser menor que dimensionCount del objeto InputTensor.

AxisDirection

Tipo: DML_AXIS_DIRECTION

Uno de los valores de la enumeración DML_AXIS_DIRECTION . Si se establece en DML_AXIS_DIRECTION_INCREASING, el producto se produce cruzando el tensor a lo largo del eje especificado por un índice de elemento ascendente. Si se establece en DML_AXIS_DIRECTION_DECREASING, el valor inverso es true y el producto se produce mediante el recorrido de elementos por índice descendente.

HasExclusiveProduct

Tipo: BOOL

Si es TRUE, el valor del elemento actual se excluye al escribir el recuento en ejecución en el tensor de salida. Si es FALSE, el valor del elemento actual se incluye en el recuento en ejecución.

Ejemplos

Todos los ejemplos de esta sección usan este mismo tensor de entrada.

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

Ejemplo 1. Producto acumulado entre franjas horizontales

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]]]]     //      [...                   ]

Ejemplo 2. Productos exclusivos

Establecer HasExclusiveProduct en TRUE tiene el efecto de excluir el valor del elemento actual del recuento en ejecución al escribir en el tensor de salida.

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

Ejemplo 3. Dirección del eje

Establecer AxisDirection en DML_AXIS_DIRECTION_DECREASING tiene el efecto de revertir el orden de recorrido de los elementos al calcular el recuento en ejecución.

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]]]]  //      [...                   ]

Ejemplo 4. Multiplicación a lo largo de un eje diferente

En este ejemplo, el producto se produce verticalmente, a lo largo del eje de altura (segunda dimensión).

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

Comentarios

Este operador admite la ejecución en contexto, lo que significa que el tensor de salida puede alias InputTensor durante el enlace.

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_3_1.

Restricciones tensor

InputTensor y OutputTensor deben tener el mismo DataType, DimensionCount y Sizes.

Compatibilidad con Tensor

DML_FEATURE_LEVEL_5_0 y versiones posteriores

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensor Entrada De 1 a 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32
OutputTensor Resultados De 1 a 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_4_0 y versiones posteriores

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensor Entrada De 1 a 8 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Resultados De 1 a 8 FLOAT32, FLOAT16, INT32, UINT32

DML_FEATURE_LEVEL_3_1 y versiones posteriores

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensor Entrada 4 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Resultados 4 FLOAT32, FLOAT16, INT32, UINT32

Requisitos

Requisito Value
Cliente mínimo compatible Compilación 22000 de Windows
Servidor mínimo compatible Compilación 22000 de Windows
Encabezado directml.h