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 |