3262 const std::string descriptorName{
"QuantizedLstmQueueDescriptor"};
3265 ValidateNumInputs(workloadInfo, descriptorName, 3);
3266 ValidateNumOutputs(workloadInfo, descriptorName, 2);
3276 std::vector<DataType> inputOutputSupportedTypes =
3281 std::vector<DataType> cellStateSupportedTypes =
3286 std::vector<DataType> weightsSupportedTypes =
3291 std::vector<DataType> biasSupportedTypes =
3297 ValidateDataTypes(inputInfo, inputOutputSupportedTypes, descriptorName);
3298 ValidateDataTypes(cellStateInInfo, cellStateSupportedTypes, descriptorName);
3299 ValidateDataTypes(outputStateInInfo, inputOutputSupportedTypes, descriptorName);
3301 ValidateDataTypes(cellStateOutInfo, cellStateSupportedTypes, descriptorName);
3302 ValidateDataTypes(outputStateOutInfo, inputOutputSupportedTypes, descriptorName);
3305 ValidateTensorDataTypesMatch(inputInfo, outputStateInInfo, descriptorName,
"input",
"outputStateIn");
3306 ValidateTensorDataTypesMatch(outputStateInInfo, outputStateOutInfo, descriptorName,
3307 "outputStateIn",
"outputStateOut");
3308 ValidateTensorDataTypesMatch(cellStateInInfo, cellStateOutInfo, descriptorName,
"cellStateIn",
"cellStateOut");
3311 ValidateTensorQuantizationSpace(inputInfo, outputStateInInfo, descriptorName,
"input",
"outputStateIn");
3312 ValidateTensorQuantizationSpace(inputInfo, outputStateOutInfo, descriptorName,
"input",
"outputStateOut");
3313 ValidateTensorQuantizationSpace(cellStateInInfo, cellStateOutInfo, descriptorName,
"cellStateIn",
"cellStateOut");
3316 const uint32_t numBatches = inputInfo.GetShape()[0];
3317 const uint32_t inputSize = inputInfo.GetShape()[1];
3318 const uint32_t outputSize = cellStateInInfo.GetShape()[1];
3321 ValidateTensorNumDimNumElem(inputInfo, 2, (numBatches * inputSize), descriptorName +
" input");
3322 ValidateTensorNumDimNumElem(cellStateInInfo, 2, (numBatches * outputSize), descriptorName +
" cellStateIn");
3323 ValidateTensorNumDimNumElem(outputStateInInfo, 2, (numBatches * outputSize), descriptorName +
" outputStateIn");
3324 ValidateTensorNumDimNumElem(cellStateOutInfo, 2, (numBatches * outputSize), descriptorName +
" cellStateOut");
3325 ValidateTensorNumDimNumElem(outputStateOutInfo, 2, (numBatches * outputSize), descriptorName +
" outputStateOut");
3330 ValidateTensorNumDimNumElem(inputToInputWeightsInfo, 2, (outputSize * inputSize),
" InputToInputWeights");
3334 ValidateTensorNumDimNumElem(inputToForgetWeightsInfo, 2, (outputSize * inputSize),
" InputToForgetWeights");
3338 ValidateTensorNumDimNumElem(inputToCellWeightsInfo, 2, (outputSize * inputSize),
" InputToCellWeights");
3342 ValidateTensorNumDimNumElem(inputToOutputWeightsInfo, 2, (outputSize * inputSize),
" InputToOutputWeights");
3346 ValidateTensorNumDimNumElem(recurrentToInputWeightsInfo, 2, (outputSize * outputSize),
" RecurrentToInputWeights");
3350 ValidateTensorNumDimNumElem(recurrentToForgetWeightsInfo, 2, (outputSize * outputSize),
3351 " RecurrentToForgetWeights");
3355 ValidateTensorNumDimNumElem(recurrentToCellWeightsInfo, 2, (outputSize * outputSize),
" RecurrentToCellWeights");
3359 ValidateTensorNumDimNumElem(recurrentToOutputWeightsInfo, 2, (outputSize * outputSize),
" RecurrentToCellWeights");
3362 ValidateDataTypes(inputToInputWeightsInfo, weightsSupportedTypes, descriptorName);
3364 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToForgetWeightsInfo, descriptorName,
3365 "inputToInputWeights",
"inputToForgetWeights");
3366 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToCellWeightsInfo, descriptorName,
3367 "inputToInputWeights",
"inputToCellWeights");
3368 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToOutputWeightsInfo, descriptorName,
3369 "inputToInputWeights",
"inputToOutputWeights");
3371 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToInputWeightsInfo, descriptorName,
3372 "inputToInputWeights",
"recurrentToInputWeights");
3373 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToForgetWeightsInfo, descriptorName,
3374 "inputToInputWeights",
"recurrentToForgeteights");
3375 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToCellWeightsInfo, descriptorName,
3376 "inputToInputWeights",
"recurrentToCellWeights");
3377 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToOutputWeightsInfo, descriptorName,
3378 "inputToInputWeights",
"recurrentToOutputWeights");
3381 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToForgetWeightsInfo,
3382 descriptorName,
"inputToInputWeights",
"inputToForgetWeights");
3383 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToCellWeightsInfo,
3384 descriptorName,
"inputToInputWeights",
"inputToCellWeights");
3385 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToOutputWeightsInfo,
3386 descriptorName,
"inputToInputWeights",
"inputToOutputWeights");
3388 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToInputWeightsInfo,
3389 descriptorName,
"inputToInputWeights",
"recurrentToInputWeights");
3390 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToForgetWeightsInfo,
3391 descriptorName,
"inputToInputWeights",
"recurrentToForgetWeights");
3392 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToCellWeightsInfo,
3393 descriptorName,
"inputToInputWeights",
"recurrentToCellWeights");
3394 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToOutputWeightsInfo,
3395 descriptorName,
"inputToInputWeights",
"recurrentToOutputWeights");
3400 ValidateTensorNumDimNumElem(inputGateBiasInfo, 1, outputSize,
" InputGateBias");
3404 ValidateTensorNumDimNumElem(forgetGateBiasInfo, 1, outputSize,
" ForgetGateBias");
3406 ValidatePointer(
m_CellBias, descriptorName,
"CellBias");
3408 ValidateTensorNumDimNumElem(cellBiasInfo, 1, outputSize,
" CellBias");
3412 ValidateTensorNumDimNumElem(outputGateBiasInfo, 1, outputSize,
" OutputGateBias");
3415 ValidateDataTypes(inputGateBiasInfo, biasSupportedTypes, descriptorName);
3417 ValidateTensorDataTypesMatch(inputGateBiasInfo, forgetGateBiasInfo, descriptorName,
3418 "inputGateBias",
"forgetGateBias");
3419 ValidateTensorDataTypesMatch(inputGateBiasInfo, cellBiasInfo, descriptorName,
3420 "inputGateBias",
"cellBias");
3421 ValidateTensorDataTypesMatch(inputGateBiasInfo, outputGateBiasInfo, descriptorName,
3422 "inputGateBias",
"outputGateBias");
3425 ValidateBiasTensorQuantization(inputGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);
3426 ValidateBiasTensorQuantization(forgetGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);
3427 ValidateBiasTensorQuantization(cellBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);
3428 ValidateBiasTensorQuantization(outputGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);
const ConstTensorHandle * m_InputGateBias
const ConstTensorHandle * m_RecurrentToInputWeights
const TensorInfo & GetTensorInfo() const
std::vector< TensorInfo > m_InputTensorInfos
const ConstTensorHandle * m_InputToForgetWeights
const ConstTensorHandle * m_RecurrentToCellWeights
const ConstTensorHandle * m_ForgetGateBias
std::vector< TensorInfo > m_OutputTensorInfos
const ConstTensorHandle * m_RecurrentToOutputWeights
const ConstTensorHandle * m_OutputGateBias
const ConstTensorHandle * m_RecurrentToForgetWeights
const ConstTensorHandle * m_InputToOutputWeights
const ConstTensorHandle * m_InputToInputWeights
const ConstTensorHandle * m_CellBias
const ConstTensorHandle * m_InputToCellWeights