ArmNN
 20.08
QLstmLayer Class Reference

This layer represents a QLstm operation. More...

#include <QLstmLayer.hpp>

Inheritance diagram for QLstmLayer:
LayerWithParameters< QLstmDescriptor > Layer IConnectableLayer

Public Member Functions

virtual std::unique_ptr< IWorkloadCreateWorkload (const IWorkloadFactory &factory) const override
 Makes a workload for the QLstm type. More...
 
QLstmLayerClone (Graph &graph) const override
 Creates a dynamically-allocated copy of this layer. More...
 
void ValidateTensorShapesFromInputs () override
 Check if the input tensor shape(s) will lead to a valid configuration of QLstmLayer. More...
 
std::vector< TensorShapeInferOutputShapes (const std::vector< TensorShape > &inputShapes) const override
 By default returns inputShapes if the number of inputs are equal to number of outputs, otherwise infers the output shapes from given input shapes and layer properties. More...
 
void Accept (ILayerVisitor &visitor) const override
 Apply a visitor to this layer. More...
 
- Public Member Functions inherited from LayerWithParameters< QLstmDescriptor >
const QLstmDescriptorGetParameters () const
 
void SerializeLayerParameters (ParameterStringifyFunction &fn) const override
 Helper to serialize the layer parameters to string (currently used in DotSerializer and company). More...
 
- Public Member Functions inherited from Layer
 Layer (unsigned int numInputSlots, unsigned int numOutputSlots, LayerType type, const char *name)
 
 Layer (unsigned int numInputSlots, unsigned int numOutputSlots, LayerType type, DataLayout layout, const char *name)
 
const std::string & GetNameStr () const
 
const OutputHandlerGetOutputHandler (unsigned int i=0) const
 
OutputHandlerGetOutputHandler (unsigned int i=0)
 
ShapeInferenceMethod GetShapeInferenceMethod () const
 
const std::vector< InputSlot > & GetInputSlots () const
 
const std::vector< OutputSlot > & GetOutputSlots () const
 
std::vector< InputSlot >::iterator BeginInputSlots ()
 
std::vector< InputSlot >::iterator EndInputSlots ()
 
std::vector< OutputSlot >::iterator BeginOutputSlots ()
 
std::vector< OutputSlot >::iterator EndOutputSlots ()
 
bool IsOutputUnconnected ()
 
void ResetPriority () const
 
LayerPriority GetPriority () const
 
LayerType GetType () const
 
DataType GetDataType () const
 
const BackendIdGetBackendId () const
 
void SetBackendId (const BackendId &id)
 
virtual void CreateTensorHandles (const TensorHandleFactoryRegistry &registry, const IWorkloadFactory &factory, const bool IsMemoryManaged=true)
 
void VerifyLayerConnections (unsigned int expectedConnections, const CheckLocation &location) const
 
virtual void ReleaseConstantData ()
 
template<typename Op >
void OperateOnConstantTensors (Op op)
 
const char * GetName () const override
 Returns the name of the layer. More...
 
unsigned int GetNumInputSlots () const override
 Returns the number of connectable input slots. More...
 
unsigned int GetNumOutputSlots () const override
 Returns the number of connectable output slots. More...
 
const InputSlotGetInputSlot (unsigned int index) const override
 Get a const input slot handle by slot index. More...
 
InputSlotGetInputSlot (unsigned int index) override
 Get the input slot handle by slot index. More...
 
const OutputSlotGetOutputSlot (unsigned int index=0) const override
 Get the const output slot handle by slot index. More...
 
OutputSlotGetOutputSlot (unsigned int index=0) override
 Get the output slot handle by slot index. More...
 
void SetGuid (LayerGuid guid)
 
LayerGuid GetGuid () const final
 Returns the unique id of the layer. More...
 
void AddRelatedLayerName (const std::string layerName)
 
const std::list< std::string > & GetRelatedLayerNames ()
 
virtual void Reparent (Graph &dest, std::list< Layer *>::const_iterator iterator)=0
 
void BackendSelectionHint (Optional< BackendId > backend) final
 Provide a hint for the optimizer as to which backend to prefer for this layer. More...
 
Optional< BackendIdGetBackendHint () const
 
void SetShapeInferenceMethod (ShapeInferenceMethod shapeInferenceMethod)
 

Public Attributes

QLstmBasicParameters m_BasicParameters
 
QLstmOptCifgParameters m_CifgParameters
 
QLstmOptProjectionParameters m_ProjectionParameters
 
QLstmOptPeepholeParameters m_PeepholeParameters
 
QLstmOptLayerNormParameters m_LayerNormParameters
 

Protected Member Functions

 QLstmLayer (const QLstmDescriptor &param, const char *name)
 Constructor to create a QLstmLayer. More...
 
 ~QLstmLayer ()=default
 Default destructor. More...
 
Layer::ConstantTensors GetConstantTensorsByRef () override
 Retrieve the handles to the constant values stored by the layer. More...
 
- Protected Member Functions inherited from LayerWithParameters< QLstmDescriptor >
 LayerWithParameters (unsigned int numInputSlots, unsigned int numOutputSlots, LayerType type, const QLstmDescriptor &param, const char *name)
 
 ~LayerWithParameters ()=default
 
WorkloadInfo PrepInfoAndDesc (QueueDescriptor &descriptor) const
 Helper function to reduce duplication in *LayerCreateWorkload. More...
 
- Protected Member Functions inherited from Layer
virtual ~Layer ()=default
 
template<typename QueueDescriptor >
void CollectQueueDescriptorInputs (QueueDescriptor &descriptor, WorkloadInfo &info) const
 
template<typename QueueDescriptor >
void CollectQueueDescriptorOutputs (QueueDescriptor &descriptor, WorkloadInfo &info) const
 
void ValidateAndCopyShape (const TensorShape &outputShape, const TensorShape &inferredShape, const ShapeInferenceMethod shapeInferenceMethod, const std::string &layerName, const unsigned int outputSlotIndex=0)
 
void VerifyShapeInferenceType (const TensorShape &outputShape, ShapeInferenceMethod shapeInferenceMethod)
 
template<typename QueueDescriptor >
WorkloadInfo PrepInfoAndDesc (QueueDescriptor &descriptor) const
 Helper function to reduce duplication in *LayerCreateWorkload. More...
 
template<typename LayerType , typename ... Params>
LayerTypeCloneBase (Graph &graph, Params &&... params) const
 
- Protected Member Functions inherited from IConnectableLayer
 ~IConnectableLayer ()
 Objects are not deletable via the handle. More...
 

Additional Inherited Members

- Public Types inherited from LayerWithParameters< QLstmDescriptor >
using DescriptorType = QLstmDescriptor
 
- Protected Types inherited from Layer
using ConstantTensors = std::vector< std::reference_wrapper< std::unique_ptr< ScopedCpuTensorHandle > >>
 
- Protected Attributes inherited from LayerWithParameters< QLstmDescriptor >
QLstmDescriptor m_Param
 The parameters for the layer (not including tensor-valued weights etc.). More...
 
- Protected Attributes inherited from Layer
std::vector< OutputHandlerm_OutputHandlers
 
ShapeInferenceMethod m_ShapeInferenceMethod
 

Detailed Description

This layer represents a QLstm operation.

Definition at line 79 of file QLstmLayer.hpp.

Constructor & Destructor Documentation

◆ QLstmLayer()

QLstmLayer ( const QLstmDescriptor param,
const char *  name 
)
protected

Constructor to create a QLstmLayer.

Parameters
[in]nameOptional name for the layer.

Definition at line 17 of file QLstmLayer.cpp.

References armnn::QLstm.

18  : LayerWithParameters(3, 3, LayerType::QLstm, param, name)
19 {
20 }
LayerWithParameters(unsigned int numInputSlots, unsigned int numOutputSlots, LayerType type, const QLstmDescriptor &param, const char *name)

◆ ~QLstmLayer()

~QLstmLayer ( )
protecteddefault

Default destructor.

Member Function Documentation

◆ Accept()

void Accept ( ILayerVisitor visitor) const
overridevirtual

Apply a visitor to this layer.

Implements IConnectableLayer.

Definition at line 303 of file QLstmLayer.cpp.

References Layer::GetName(), LayerWithParameters< QLstmDescriptor >::GetParameters(), QLstmLayer::m_BasicParameters, QLstmBasicParameters::m_CellBias, LstmInputParams::m_CellBias, LstmInputParams::m_CellLayerNormWeights, QLstmOptLayerNormParameters::m_CellLayerNormWeights, LstmInputParams::m_CellToForgetWeights, QLstmOptPeepholeParameters::m_CellToForgetWeights, LstmInputParams::m_CellToInputWeights, QLstmOptPeepholeParameters::m_CellToInputWeights, LstmInputParams::m_CellToOutputWeights, QLstmOptPeepholeParameters::m_CellToOutputWeights, QLstmLayer::m_CifgParameters, QLstmBasicParameters::m_ForgetGateBias, LstmInputParams::m_ForgetGateBias, LstmInputParams::m_ForgetLayerNormWeights, QLstmOptLayerNormParameters::m_ForgetLayerNormWeights, LstmInputParams::m_InputGateBias, QLstmOptCifgParameters::m_InputGateBias, LstmInputParams::m_InputLayerNormWeights, QLstmOptLayerNormParameters::m_InputLayerNormWeights, QLstmBasicParameters::m_InputToCellWeights, LstmInputParams::m_InputToCellWeights, QLstmBasicParameters::m_InputToForgetWeights, LstmInputParams::m_InputToForgetWeights, LstmInputParams::m_InputToInputWeights, QLstmOptCifgParameters::m_InputToInputWeights, QLstmBasicParameters::m_InputToOutputWeights, LstmInputParams::m_InputToOutputWeights, QLstmLayer::m_LayerNormParameters, QLstmBasicParameters::m_OutputGateBias, LstmInputParams::m_OutputGateBias, LstmInputParams::m_OutputLayerNormWeights, QLstmOptLayerNormParameters::m_OutputLayerNormWeights, QLstmLayer::m_PeepholeParameters, QLstmOptProjectionParameters::m_ProjectionBias, LstmInputParams::m_ProjectionBias, QLstmLayer::m_ProjectionParameters, QLstmOptProjectionParameters::m_ProjectionWeights, LstmInputParams::m_ProjectionWeights, QLstmBasicParameters::m_RecurrentToCellWeights, LstmInputParams::m_RecurrentToCellWeights, QLstmBasicParameters::m_RecurrentToForgetWeights, LstmInputParams::m_RecurrentToForgetWeights, LstmInputParams::m_RecurrentToInputWeights, QLstmOptCifgParameters::m_RecurrentToInputWeights, QLstmBasicParameters::m_RecurrentToOutputWeights, LstmInputParams::m_RecurrentToOutputWeights, and ILayerVisitor::VisitQLstmLayer().

304 {
305  LstmInputParams inputParams;
306 
307  ConstTensor inputToInputWeightsTensor;
309  {
310  ConstTensor inputToInputWeightsTensorCopy(m_CifgParameters.m_InputToInputWeights->GetTensorInfo(),
312  inputToInputWeightsTensor = inputToInputWeightsTensorCopy;
313  inputParams.m_InputToInputWeights = &inputToInputWeightsTensor;
314  }
315 
316  ConstTensor inputToForgetWeightsTensor;
318  {
319  ConstTensor inputToForgetWeightsTensorCopy(m_BasicParameters.m_InputToForgetWeights->GetTensorInfo(),
321  inputToForgetWeightsTensor = inputToForgetWeightsTensorCopy;
322  inputParams.m_InputToForgetWeights = &inputToForgetWeightsTensor;
323  }
324 
325  ConstTensor inputToCellWeightsTensor;
327  {
328  ConstTensor inputToCellWeightsTensorCopy(m_BasicParameters.m_InputToCellWeights->GetTensorInfo(),
330  inputToCellWeightsTensor = inputToCellWeightsTensorCopy;
331  inputParams.m_InputToCellWeights = &inputToCellWeightsTensor;
332  }
333 
334  ConstTensor inputToOutputWeightsTensor;
336  {
337  ConstTensor inputToOutputWeightsTensorCopy(m_BasicParameters.m_InputToOutputWeights->GetTensorInfo(),
339  inputToOutputWeightsTensor = inputToOutputWeightsTensorCopy;
340  inputParams.m_InputToOutputWeights = &inputToOutputWeightsTensor;
341  }
342 
343  ConstTensor recurrentToInputWeightsTensor;
345  {
346  ConstTensor recurrentToInputWeightsTensorCopy(
349  recurrentToInputWeightsTensor = recurrentToInputWeightsTensorCopy;
350  inputParams.m_RecurrentToInputWeights = &recurrentToInputWeightsTensor;
351  }
352 
353  ConstTensor recurrentToForgetWeightsTensor;
355  {
356  ConstTensor recurrentToForgetWeightsTensorCopy(
359  recurrentToForgetWeightsTensor = recurrentToForgetWeightsTensorCopy;
360  inputParams.m_RecurrentToForgetWeights = &recurrentToForgetWeightsTensor;
361  }
362 
363  ConstTensor recurrentToCellWeightsTensor;
365  {
366  ConstTensor recurrentToCellWeightsTensorCopy(
369  recurrentToCellWeightsTensor = recurrentToCellWeightsTensorCopy;
370  inputParams.m_RecurrentToCellWeights = &recurrentToCellWeightsTensor;
371  }
372 
373  ConstTensor recurrentToOutputWeightsTensor;
375  {
376  ConstTensor recurrentToOutputWeightsTensorCopy(
379  recurrentToOutputWeightsTensor = recurrentToOutputWeightsTensorCopy;
380  inputParams.m_RecurrentToOutputWeights = &recurrentToOutputWeightsTensor;
381  }
382 
383  ConstTensor cellToInputWeightsTensor;
385  {
386  ConstTensor cellToInputWeightsTensorCopy(m_PeepholeParameters.m_CellToInputWeights->GetTensorInfo(),
388  cellToInputWeightsTensor = cellToInputWeightsTensorCopy;
389  inputParams.m_CellToInputWeights = &cellToInputWeightsTensor;
390  }
391 
392  ConstTensor cellToForgetWeightsTensor;
394  {
395  ConstTensor cellToForgetWeightsTensorCopy(m_PeepholeParameters.m_CellToForgetWeights->GetTensorInfo(),
397  cellToForgetWeightsTensor = cellToForgetWeightsTensorCopy;
398  inputParams.m_CellToForgetWeights = &cellToForgetWeightsTensor;
399  }
400 
401  ConstTensor cellToOutputWeightsTensor;
403  {
404  ConstTensor cellToOutputWeightsTensorCopy(m_PeepholeParameters.m_CellToOutputWeights->GetTensorInfo(),
406  cellToOutputWeightsTensor = cellToOutputWeightsTensorCopy;
407  inputParams.m_CellToOutputWeights = &cellToOutputWeightsTensor;
408  }
409 
410  ConstTensor inputGateBiasTensor;
411  if (m_CifgParameters.m_InputGateBias != nullptr)
412  {
413  ConstTensor inputGateBiasTensorCopy(m_CifgParameters.m_InputGateBias->GetTensorInfo(),
414  m_CifgParameters.m_InputGateBias->Map(true));
415  inputGateBiasTensor = inputGateBiasTensorCopy;
416  inputParams.m_InputGateBias = &inputGateBiasTensor;
417  }
418 
419  ConstTensor forgetGateBiasTensor;
420  if (m_BasicParameters.m_ForgetGateBias != nullptr)
421  {
422  ConstTensor forgetGateBiasTensorCopy(m_BasicParameters.m_ForgetGateBias->GetTensorInfo(),
424  forgetGateBiasTensor = forgetGateBiasTensorCopy;
425  inputParams.m_ForgetGateBias = &forgetGateBiasTensor;
426  }
427 
428  ConstTensor cellBiasTensor;
429  if (m_BasicParameters.m_CellBias != nullptr)
430  {
431  ConstTensor cellBiasTensorCopy(m_BasicParameters.m_CellBias->GetTensorInfo(),
432  m_BasicParameters.m_CellBias->Map(true));
433  cellBiasTensor = cellBiasTensorCopy;
434  inputParams.m_CellBias = &cellBiasTensor;
435  }
436 
437  ConstTensor outputGateBias;
438  if (m_BasicParameters.m_OutputGateBias != nullptr)
439  {
440  ConstTensor outputGateBiasCopy(m_BasicParameters.m_OutputGateBias->GetTensorInfo(),
442  outputGateBias = outputGateBiasCopy;
443  inputParams.m_OutputGateBias = &outputGateBias;
444  }
445 
446  ConstTensor projectionWeightsTensor;
448  {
449  ConstTensor projectionWeightsTensorCopy(m_ProjectionParameters.m_ProjectionWeights->GetTensorInfo(),
451  projectionWeightsTensor = projectionWeightsTensorCopy;
452  inputParams.m_ProjectionWeights = &projectionWeightsTensor;
453  }
454 
455  ConstTensor projectionBiasTensor;
457  {
458  ConstTensor projectionBiasTensorCopy(m_ProjectionParameters.m_ProjectionBias->GetTensorInfo(),
460  projectionBiasTensor = projectionBiasTensorCopy;
461  inputParams.m_ProjectionBias = &projectionBiasTensor;
462  }
463 
464  ConstTensor inputLayerNormTensor;
466  {
467  ConstTensor inputLayerNormTensorCopy(m_LayerNormParameters.m_InputLayerNormWeights->GetTensorInfo(),
469  inputLayerNormTensor = inputLayerNormTensorCopy;
470  inputParams.m_InputLayerNormWeights = &inputLayerNormTensor;
471  }
472 
473  ConstTensor forgetLayerNormTensor;
475  {
476  ConstTensor forgetLayerNormTensorCopy(m_LayerNormParameters.m_ForgetLayerNormWeights->GetTensorInfo(),
478  forgetLayerNormTensor = forgetLayerNormTensorCopy;
479  inputParams.m_ForgetLayerNormWeights = &forgetLayerNormTensor;
480  }
481 
482  ConstTensor cellLayerNormTensor;
484  {
485  ConstTensor cellLayerNormTensorCopy(m_LayerNormParameters.m_CellLayerNormWeights->GetTensorInfo(),
487  cellLayerNormTensor = cellLayerNormTensorCopy;
488  inputParams.m_CellLayerNormWeights = &cellLayerNormTensor;
489  }
490 
491  ConstTensor outputLayerNormTensor;
493  {
494  ConstTensor outputLayerNormTensorCopy(m_LayerNormParameters.m_OutputLayerNormWeights->GetTensorInfo(),
496  outputLayerNormTensor = outputLayerNormTensorCopy;
497  inputParams.m_OutputLayerNormWeights = &outputLayerNormTensor;
498  }
499 
500 
501  visitor.VisitQLstmLayer(this, GetParameters(), inputParams, GetName());
502 }
QLstmOptProjectionParameters m_ProjectionParameters
Definition: QLstmLayer.hpp:85
std::unique_ptr< ScopedCpuTensorHandle > m_OutputGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:35
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:61
std::unique_ptr< ScopedCpuTensorHandle > m_CellLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:73
std::unique_ptr< ScopedCpuTensorHandle > m_InputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:69
std::unique_ptr< ScopedCpuTensorHandle > m_InputToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:59
std::unique_ptr< ScopedCpuTensorHandle > m_CellToOutputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:53
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionBias
A unique pointer to represent 1D weights tensor with dimensions [output_size] (int32).
Definition: QLstmLayer.hpp:43
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionWeights
A unique pointer to represent 2D weights tensor with dimensions [output_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:41
std::unique_ptr< ScopedCpuTensorHandle > m_InputToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:17
std::unique_ptr< ScopedCpuTensorHandle > m_CellBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:33
std::unique_ptr< ScopedCpuTensorHandle > m_InputToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:21
std::unique_ptr< ScopedCpuTensorHandle > m_OutputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:75
QLstmOptLayerNormParameters m_LayerNormParameters
Definition: QLstmLayer.hpp:87
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:24
std::unique_ptr< ScopedCpuTensorHandle > m_CellToInputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:49
std::unique_ptr< ScopedCpuTensorHandle > m_CellToForgetWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:51
std::unique_ptr< ScopedCpuTensorHandle > m_InputGateBias
A unique pointer to represent 1D weights tensor with dimensions [num_units] (int32).
Definition: QLstmLayer.hpp:63
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:71
std::unique_ptr< ScopedCpuTensorHandle > m_InputToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:19
QLstmBasicParameters m_BasicParameters
Definition: QLstmLayer.hpp:83
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:31
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:26
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:28
QLstmOptCifgParameters m_CifgParameters
Definition: QLstmLayer.hpp:84
QLstmOptPeepholeParameters m_PeepholeParameters
Definition: QLstmLayer.hpp:86
const char * GetName() const override
Returns the name of the layer.
Definition: Layer.hpp:307

◆ Clone()

QLstmLayer * Clone ( Graph graph) const
overridevirtual

Creates a dynamically-allocated copy of this layer.

Parameters
[in]graphThe graph into which this layer is being cloned.

Implements Layer.

Definition at line 79 of file QLstmLayer.cpp.

References Layer::GetName(), QLstmLayer::m_BasicParameters, QLstmBasicParameters::m_CellBias, QLstmOptLayerNormParameters::m_CellLayerNormWeights, QLstmOptPeepholeParameters::m_CellToForgetWeights, QLstmOptPeepholeParameters::m_CellToInputWeights, QLstmOptPeepholeParameters::m_CellToOutputWeights, QLstmLayer::m_CifgParameters, QLstmBasicParameters::m_ForgetGateBias, QLstmOptLayerNormParameters::m_ForgetLayerNormWeights, QLstmOptCifgParameters::m_InputGateBias, QLstmOptLayerNormParameters::m_InputLayerNormWeights, QLstmBasicParameters::m_InputToCellWeights, QLstmBasicParameters::m_InputToForgetWeights, QLstmOptCifgParameters::m_InputToInputWeights, QLstmBasicParameters::m_InputToOutputWeights, QLstmLayer::m_LayerNormParameters, QLstmBasicParameters::m_OutputGateBias, QLstmOptLayerNormParameters::m_OutputLayerNormWeights, LayerWithParameters< QLstmDescriptor >::m_Param, QLstmLayer::m_PeepholeParameters, QLstmOptProjectionParameters::m_ProjectionBias, QLstmLayer::m_ProjectionParameters, QLstmOptProjectionParameters::m_ProjectionWeights, QLstmBasicParameters::m_RecurrentToCellWeights, QLstmBasicParameters::m_RecurrentToForgetWeights, QLstmOptCifgParameters::m_RecurrentToInputWeights, and QLstmBasicParameters::m_RecurrentToOutputWeights.

80 {
81  auto layer = CloneBase<QLstmLayer>(graph, m_Param, GetName());
82 
83  layer->m_BasicParameters.m_InputToForgetWeights = m_BasicParameters.m_InputToForgetWeights ?
84  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_InputToForgetWeights) : nullptr;
85  layer->m_BasicParameters.m_InputToCellWeights = m_BasicParameters.m_InputToCellWeights ?
86  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_InputToCellWeights) : nullptr;
87  layer->m_BasicParameters.m_InputToOutputWeights = m_BasicParameters.m_InputToOutputWeights ?
88  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_InputToOutputWeights) : nullptr;
89  layer->m_BasicParameters.m_RecurrentToForgetWeights = m_BasicParameters.m_RecurrentToForgetWeights ?
90  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_RecurrentToForgetWeights) : nullptr;
91  layer->m_BasicParameters.m_RecurrentToCellWeights = m_BasicParameters.m_RecurrentToCellWeights ?
92  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_RecurrentToCellWeights) : nullptr;
93  layer->m_BasicParameters.m_RecurrentToOutputWeights = m_BasicParameters.m_RecurrentToOutputWeights ?
94  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_RecurrentToOutputWeights) : nullptr;
95  layer->m_BasicParameters.m_ForgetGateBias = m_BasicParameters.m_ForgetGateBias ?
96  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_ForgetGateBias) : nullptr;
97  layer->m_BasicParameters.m_CellBias = m_BasicParameters.m_CellBias ?
98  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_CellBias) : nullptr;
99  layer->m_BasicParameters.m_OutputGateBias = m_BasicParameters.m_OutputGateBias ?
100  std::make_unique<ScopedCpuTensorHandle>(*m_BasicParameters.m_OutputGateBias) : nullptr;
101 
102  if (!m_Param.m_CifgEnabled)
103  {
104  layer->m_CifgParameters.m_InputToInputWeights = m_CifgParameters.m_InputToInputWeights ?
105  std::make_unique<ScopedCpuTensorHandle>(*m_CifgParameters.m_InputToInputWeights) : nullptr;
106  layer->m_CifgParameters.m_RecurrentToInputWeights = m_CifgParameters.m_RecurrentToInputWeights ?
107  std::make_unique<ScopedCpuTensorHandle>(*m_CifgParameters.m_RecurrentToInputWeights) : nullptr;
108  layer->m_CifgParameters.m_InputGateBias = m_CifgParameters.m_InputGateBias ?
109  std::make_unique<ScopedCpuTensorHandle>(*m_CifgParameters.m_InputGateBias) : nullptr;
110  }
111 
112  if (m_Param.m_ProjectionEnabled)
113  {
114  layer->m_ProjectionParameters.m_ProjectionWeights = m_ProjectionParameters.m_ProjectionWeights ?
115  std::make_unique<ScopedCpuTensorHandle>(*m_ProjectionParameters.m_ProjectionWeights) : nullptr;
116  layer->m_ProjectionParameters.m_ProjectionBias = m_ProjectionParameters.m_ProjectionBias ?
117  std::make_unique<ScopedCpuTensorHandle>(*m_ProjectionParameters.m_ProjectionBias) : nullptr;
118  }
119 
120  if (m_Param.m_PeepholeEnabled)
121  {
122  if (!m_Param.m_CifgEnabled) {
123  layer->m_PeepholeParameters.m_CellToInputWeights = m_PeepholeParameters.m_CellToInputWeights ?
124  std::make_unique<ScopedCpuTensorHandle>(*m_PeepholeParameters.m_CellToInputWeights) : nullptr;
125  }
126 
127  layer->m_PeepholeParameters.m_CellToForgetWeights = m_PeepholeParameters.m_CellToForgetWeights ?
128  std::make_unique<ScopedCpuTensorHandle>(*m_PeepholeParameters.m_CellToForgetWeights) : nullptr;
129  layer->m_PeepholeParameters.m_CellToOutputWeights = m_PeepholeParameters.m_CellToOutputWeights ?
130  std::make_unique<ScopedCpuTensorHandle>(*m_PeepholeParameters.m_CellToOutputWeights) : nullptr;
131  }
132 
133  if (m_Param.m_LayerNormEnabled)
134  {
135  if (!m_Param.m_CifgEnabled) {
136  layer->m_LayerNormParameters.m_InputLayerNormWeights = m_LayerNormParameters.m_InputLayerNormWeights ?
137  std::make_unique<ScopedCpuTensorHandle>(*m_LayerNormParameters.m_InputLayerNormWeights) : nullptr;
138  }
139 
140  layer->m_LayerNormParameters.m_ForgetLayerNormWeights = m_LayerNormParameters.m_ForgetLayerNormWeights ?
141  std::make_unique<ScopedCpuTensorHandle>(*m_LayerNormParameters.m_ForgetLayerNormWeights) : nullptr;
142  layer->m_LayerNormParameters.m_CellLayerNormWeights = m_LayerNormParameters.m_CellLayerNormWeights ?
143  std::make_unique<ScopedCpuTensorHandle>(*m_LayerNormParameters.m_CellLayerNormWeights) : nullptr;
144  layer->m_LayerNormParameters.m_OutputLayerNormWeights = m_LayerNormParameters.m_OutputLayerNormWeights ?
145  std::make_unique<ScopedCpuTensorHandle>(*m_LayerNormParameters.m_OutputLayerNormWeights) : nullptr;
146  }
147 
148  return std::move(layer);
149 }
QLstmDescriptor m_Param
The parameters for the layer (not including tensor-valued weights etc.).
QLstmOptProjectionParameters m_ProjectionParameters
Definition: QLstmLayer.hpp:85
std::unique_ptr< ScopedCpuTensorHandle > m_OutputGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:35
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:61
std::unique_ptr< ScopedCpuTensorHandle > m_CellLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:73
std::unique_ptr< ScopedCpuTensorHandle > m_InputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:69
std::unique_ptr< ScopedCpuTensorHandle > m_InputToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:59
std::unique_ptr< ScopedCpuTensorHandle > m_CellToOutputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:53
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionBias
A unique pointer to represent 1D weights tensor with dimensions [output_size] (int32).
Definition: QLstmLayer.hpp:43
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionWeights
A unique pointer to represent 2D weights tensor with dimensions [output_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:41
std::unique_ptr< ScopedCpuTensorHandle > m_InputToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:17
std::unique_ptr< ScopedCpuTensorHandle > m_CellBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:33
std::unique_ptr< ScopedCpuTensorHandle > m_InputToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:21
std::unique_ptr< ScopedCpuTensorHandle > m_OutputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:75
QLstmOptLayerNormParameters m_LayerNormParameters
Definition: QLstmLayer.hpp:87
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:24
std::unique_ptr< ScopedCpuTensorHandle > m_CellToInputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:49
std::unique_ptr< ScopedCpuTensorHandle > m_CellToForgetWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:51
std::unique_ptr< ScopedCpuTensorHandle > m_InputGateBias
A unique pointer to represent 1D weights tensor with dimensions [num_units] (int32).
Definition: QLstmLayer.hpp:63
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:71
std::unique_ptr< ScopedCpuTensorHandle > m_InputToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:19
QLstmBasicParameters m_BasicParameters
Definition: QLstmLayer.hpp:83
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:31
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:26
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:28
QLstmOptCifgParameters m_CifgParameters
Definition: QLstmLayer.hpp:84
QLstmOptPeepholeParameters m_PeepholeParameters
Definition: QLstmLayer.hpp:86
const char * GetName() const override
Returns the name of the layer.
Definition: Layer.hpp:307

◆ CreateWorkload()

std::unique_ptr< IWorkload > CreateWorkload ( const IWorkloadFactory factory) const
overridevirtual

Makes a workload for the QLstm type.

Parameters
[in]graphThe graph where this layer can be found.
[in]factoryThe workload factory which will create the workload.
Returns
A pointer to the created workload, or nullptr if not created.

Implements Layer.

Definition at line 22 of file QLstmLayer.cpp.

References IWorkloadFactory::CreateQLstm(), QLstmLayer::m_BasicParameters, QLstmBasicParameters::m_CellBias, QLstmQueueDescriptor::m_CellBias, QLstmOptLayerNormParameters::m_CellLayerNormWeights, QLstmQueueDescriptor::m_CellLayerNormWeights, QLstmOptPeepholeParameters::m_CellToForgetWeights, QLstmQueueDescriptor::m_CellToForgetWeights, QLstmOptPeepholeParameters::m_CellToInputWeights, QLstmQueueDescriptor::m_CellToInputWeights, QLstmOptPeepholeParameters::m_CellToOutputWeights, QLstmQueueDescriptor::m_CellToOutputWeights, QLstmDescriptor::m_CifgEnabled, QLstmLayer::m_CifgParameters, QLstmBasicParameters::m_ForgetGateBias, QLstmQueueDescriptor::m_ForgetGateBias, QLstmOptLayerNormParameters::m_ForgetLayerNormWeights, QLstmQueueDescriptor::m_ForgetLayerNormWeights, QLstmOptCifgParameters::m_InputGateBias, QLstmQueueDescriptor::m_InputGateBias, QLstmOptLayerNormParameters::m_InputLayerNormWeights, QLstmQueueDescriptor::m_InputLayerNormWeights, QLstmBasicParameters::m_InputToCellWeights, QLstmQueueDescriptor::m_InputToCellWeights, QLstmBasicParameters::m_InputToForgetWeights, QLstmQueueDescriptor::m_InputToForgetWeights, QLstmOptCifgParameters::m_InputToInputWeights, QLstmQueueDescriptor::m_InputToInputWeights, QLstmBasicParameters::m_InputToOutputWeights, QLstmQueueDescriptor::m_InputToOutputWeights, QLstmDescriptor::m_LayerNormEnabled, QLstmLayer::m_LayerNormParameters, QLstmBasicParameters::m_OutputGateBias, QLstmQueueDescriptor::m_OutputGateBias, QLstmOptLayerNormParameters::m_OutputLayerNormWeights, QLstmQueueDescriptor::m_OutputLayerNormWeights, LayerWithParameters< QLstmDescriptor >::m_Param, QLstmDescriptor::m_PeepholeEnabled, QLstmLayer::m_PeepholeParameters, QLstmOptProjectionParameters::m_ProjectionBias, QLstmQueueDescriptor::m_ProjectionBias, QLstmDescriptor::m_ProjectionEnabled, QLstmLayer::m_ProjectionParameters, QLstmOptProjectionParameters::m_ProjectionWeights, QLstmQueueDescriptor::m_ProjectionWeights, QLstmBasicParameters::m_RecurrentToCellWeights, QLstmQueueDescriptor::m_RecurrentToCellWeights, QLstmBasicParameters::m_RecurrentToForgetWeights, QLstmQueueDescriptor::m_RecurrentToForgetWeights, QLstmOptCifgParameters::m_RecurrentToInputWeights, QLstmQueueDescriptor::m_RecurrentToInputWeights, QLstmBasicParameters::m_RecurrentToOutputWeights, QLstmQueueDescriptor::m_RecurrentToOutputWeights, and LayerWithParameters< QLstmDescriptor >::PrepInfoAndDesc().

23 {
24  QLstmQueueDescriptor descriptor;
25 
26  // Basic parameters
27  descriptor.m_InputToForgetWeights = m_BasicParameters.m_InputToForgetWeights.get();
28  descriptor.m_InputToCellWeights = m_BasicParameters.m_InputToCellWeights.get();
29  descriptor.m_InputToOutputWeights = m_BasicParameters.m_InputToOutputWeights.get();
30  descriptor.m_RecurrentToForgetWeights = m_BasicParameters.m_RecurrentToForgetWeights.get();
31  descriptor.m_RecurrentToCellWeights = m_BasicParameters.m_RecurrentToCellWeights.get();
32  descriptor.m_RecurrentToOutputWeights = m_BasicParameters.m_RecurrentToOutputWeights.get();
33  descriptor.m_ForgetGateBias = m_BasicParameters.m_ForgetGateBias.get();
34  descriptor.m_CellBias = m_BasicParameters.m_CellBias.get();
35  descriptor.m_OutputGateBias = m_BasicParameters.m_OutputGateBias.get();
36 
37  // CIFG parameters
39  {
40  descriptor.m_InputToInputWeights = m_CifgParameters.m_InputToInputWeights.get();
41  descriptor.m_RecurrentToInputWeights = m_CifgParameters.m_RecurrentToInputWeights.get();
42  descriptor.m_InputGateBias = m_CifgParameters.m_InputGateBias.get();
43  }
44 
45  // Projection parameters
47  {
48  descriptor.m_ProjectionWeights = m_ProjectionParameters.m_ProjectionWeights.get();
49  descriptor.m_ProjectionBias = m_ProjectionParameters.m_ProjectionBias.get();
50  }
51 
52  // Peephole parameters
54  {
56  {
57  descriptor.m_CellToInputWeights = m_PeepholeParameters.m_CellToInputWeights.get();
58  }
59 
60  descriptor.m_CellToForgetWeights = m_PeepholeParameters.m_CellToForgetWeights.get();
61  descriptor.m_CellToOutputWeights = m_PeepholeParameters.m_CellToOutputWeights.get();
62  }
63 
64  // Layer normalisation parameters
66  {
68  {
69  descriptor.m_InputLayerNormWeights = m_LayerNormParameters.m_InputLayerNormWeights.get();
70  }
71  descriptor.m_ForgetLayerNormWeights = m_LayerNormParameters.m_ForgetLayerNormWeights.get();
72  descriptor.m_CellLayerNormWeights = m_LayerNormParameters.m_CellLayerNormWeights.get();
73  descriptor.m_OutputLayerNormWeights = m_LayerNormParameters.m_OutputLayerNormWeights.get();
74  }
75 
76  return factory.CreateQLstm(descriptor, PrepInfoAndDesc(descriptor));
77 }
QLstmDescriptor m_Param
The parameters for the layer (not including tensor-valued weights etc.).
QLstmOptProjectionParameters m_ProjectionParameters
Definition: QLstmLayer.hpp:85
std::unique_ptr< ScopedCpuTensorHandle > m_OutputGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:35
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:61
std::unique_ptr< ScopedCpuTensorHandle > m_CellLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:73
bool m_PeepholeEnabled
Enable/disable peephole.
std::unique_ptr< ScopedCpuTensorHandle > m_InputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:69
std::unique_ptr< ScopedCpuTensorHandle > m_InputToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:59
std::unique_ptr< ScopedCpuTensorHandle > m_CellToOutputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:53
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionBias
A unique pointer to represent 1D weights tensor with dimensions [output_size] (int32).
Definition: QLstmLayer.hpp:43
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionWeights
A unique pointer to represent 2D weights tensor with dimensions [output_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:41
std::unique_ptr< ScopedCpuTensorHandle > m_InputToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:17
std::unique_ptr< ScopedCpuTensorHandle > m_CellBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:33
std::unique_ptr< ScopedCpuTensorHandle > m_InputToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:21
std::unique_ptr< ScopedCpuTensorHandle > m_OutputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:75
QLstmOptLayerNormParameters m_LayerNormParameters
Definition: QLstmLayer.hpp:87
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:24
std::unique_ptr< ScopedCpuTensorHandle > m_CellToInputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:49
bool m_LayerNormEnabled
Enable/disable layer normalization.
std::unique_ptr< ScopedCpuTensorHandle > m_CellToForgetWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:51
std::unique_ptr< ScopedCpuTensorHandle > m_InputGateBias
A unique pointer to represent 1D weights tensor with dimensions [num_units] (int32).
Definition: QLstmLayer.hpp:63
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:71
std::unique_ptr< ScopedCpuTensorHandle > m_InputToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:19
QLstmBasicParameters m_BasicParameters
Definition: QLstmLayer.hpp:83
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:31
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:26
bool m_ProjectionEnabled
Enable/disable the projection layer.
WorkloadInfo PrepInfoAndDesc(QueueDescriptor &descriptor) const
Helper function to reduce duplication in *LayerCreateWorkload.
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:28
QLstmOptCifgParameters m_CifgParameters
Definition: QLstmLayer.hpp:84
QLstmOptPeepholeParameters m_PeepholeParameters
Definition: QLstmLayer.hpp:86
bool m_CifgEnabled
Enable/disable CIFG (coupled input & forget gate).

◆ GetConstantTensorsByRef()

Layer::ConstantTensors GetConstantTensorsByRef ( )
overrideprotectedvirtual

Retrieve the handles to the constant values stored by the layer.

Returns
A vector of the constant tensors stored by this layer.

Reimplemented from Layer.

Definition at line 270 of file QLstmLayer.cpp.

References QLstmLayer::m_BasicParameters, QLstmBasicParameters::m_CellBias, QLstmOptLayerNormParameters::m_CellLayerNormWeights, QLstmOptPeepholeParameters::m_CellToForgetWeights, QLstmOptPeepholeParameters::m_CellToInputWeights, QLstmOptPeepholeParameters::m_CellToOutputWeights, QLstmLayer::m_CifgParameters, QLstmBasicParameters::m_ForgetGateBias, QLstmOptLayerNormParameters::m_ForgetLayerNormWeights, QLstmOptCifgParameters::m_InputGateBias, QLstmOptLayerNormParameters::m_InputLayerNormWeights, QLstmBasicParameters::m_InputToCellWeights, QLstmBasicParameters::m_InputToForgetWeights, QLstmOptCifgParameters::m_InputToInputWeights, QLstmBasicParameters::m_InputToOutputWeights, QLstmLayer::m_LayerNormParameters, QLstmBasicParameters::m_OutputGateBias, QLstmOptLayerNormParameters::m_OutputLayerNormWeights, QLstmLayer::m_PeepholeParameters, QLstmOptProjectionParameters::m_ProjectionBias, QLstmLayer::m_ProjectionParameters, QLstmOptProjectionParameters::m_ProjectionWeights, QLstmBasicParameters::m_RecurrentToCellWeights, QLstmBasicParameters::m_RecurrentToForgetWeights, QLstmOptCifgParameters::m_RecurrentToInputWeights, and QLstmBasicParameters::m_RecurrentToOutputWeights.

271 {
281 
282  // Cifg parameters
286 
287  // Projection parameters
290 
291  // Peephole parameters
295 
296  // Layer normalisation parameters
301 }
QLstmOptProjectionParameters m_ProjectionParameters
Definition: QLstmLayer.hpp:85
std::unique_ptr< ScopedCpuTensorHandle > m_OutputGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:35
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:61
std::unique_ptr< ScopedCpuTensorHandle > m_CellLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:73
std::unique_ptr< ScopedCpuTensorHandle > m_InputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:69
std::unique_ptr< ScopedCpuTensorHandle > m_InputToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:59
std::unique_ptr< ScopedCpuTensorHandle > m_CellToOutputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:53
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionBias
A unique pointer to represent 1D weights tensor with dimensions [output_size] (int32).
Definition: QLstmLayer.hpp:43
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionWeights
A unique pointer to represent 2D weights tensor with dimensions [output_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:41
std::unique_ptr< ScopedCpuTensorHandle > m_InputToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:17
std::unique_ptr< ScopedCpuTensorHandle > m_CellBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:33
std::unique_ptr< ScopedCpuTensorHandle > m_InputToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:21
std::unique_ptr< ScopedCpuTensorHandle > m_OutputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:75
QLstmOptLayerNormParameters m_LayerNormParameters
Definition: QLstmLayer.hpp:87
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:24
std::unique_ptr< ScopedCpuTensorHandle > m_CellToInputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:49
std::unique_ptr< ScopedCpuTensorHandle > m_CellToForgetWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:51
std::unique_ptr< ScopedCpuTensorHandle > m_InputGateBias
A unique pointer to represent 1D weights tensor with dimensions [num_units] (int32).
Definition: QLstmLayer.hpp:63
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:71
std::unique_ptr< ScopedCpuTensorHandle > m_InputToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:19
QLstmBasicParameters m_BasicParameters
Definition: QLstmLayer.hpp:83
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:31
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:26
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:28
QLstmOptCifgParameters m_CifgParameters
Definition: QLstmLayer.hpp:84
QLstmOptPeepholeParameters m_PeepholeParameters
Definition: QLstmLayer.hpp:86

◆ InferOutputShapes()

std::vector< TensorShape > InferOutputShapes ( const std::vector< TensorShape > &  inputShapes) const
overridevirtual

By default returns inputShapes if the number of inputs are equal to number of outputs, otherwise infers the output shapes from given input shapes and layer properties.

Parameters
[in]inputShapesThe input shapes layer has.
Returns
A vector to the inferred output shape.

Reimplemented from Layer.

Definition at line 151 of file QLstmLayer.cpp.

References ARMNN_ASSERT.

Referenced by QLstmInferOutputShapeImpl(), and QLstmLayer::ValidateTensorShapesFromInputs().

152 {
153  ARMNN_ASSERT(inputShapes.size() == 3);
154 
155  // Get input values for validation
156  unsigned int batchSize = inputShapes[0][0];
157  unsigned int outputSize = inputShapes[1][1];
158  unsigned int numUnits = inputShapes[2][1];
159 
160  std::vector<TensorShape> outShapes;
161  outShapes.push_back(TensorShape({ batchSize, outputSize })); // outputStateOut
162  outShapes.push_back(TensorShape({ batchSize, numUnits })); // cellStateOut
163  outShapes.push_back(TensorShape({ batchSize, outputSize })); // output
164 
165  return outShapes;
166 }
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14

◆ ValidateTensorShapesFromInputs()

void ValidateTensorShapesFromInputs ( )
overridevirtual

Check if the input tensor shape(s) will lead to a valid configuration of QLstmLayer.

Parameters
[in]shapeInferenceMethodIndicates if output shape shall be overwritten or just validated.

Implements Layer.

Definition at line 168 of file QLstmLayer.cpp.

References ARMNN_ASSERT, ARMNN_ASSERT_MSG, CHECK_LOCATION, InputSlot::GetConnection(), Layer::GetInputSlot(), Layer::GetOutputSlot(), TensorInfo::GetShape(), armnn::GetTensorInfo(), IOutputSlot::GetTensorInfo(), OutputSlot::GetTensorInfo(), QLstmLayer::InferOutputShapes(), QLstmLayer::m_BasicParameters, QLstmBasicParameters::m_CellBias, QLstmOptPeepholeParameters::m_CellToForgetWeights, QLstmOptPeepholeParameters::m_CellToInputWeights, QLstmOptPeepholeParameters::m_CellToOutputWeights, QLstmDescriptor::m_CifgEnabled, QLstmLayer::m_CifgParameters, QLstmBasicParameters::m_ForgetGateBias, QLstmOptCifgParameters::m_InputGateBias, QLstmBasicParameters::m_InputToCellWeights, QLstmBasicParameters::m_InputToForgetWeights, QLstmOptCifgParameters::m_InputToInputWeights, QLstmBasicParameters::m_InputToOutputWeights, QLstmBasicParameters::m_OutputGateBias, LayerWithParameters< QLstmDescriptor >::m_Param, QLstmDescriptor::m_PeepholeEnabled, QLstmLayer::m_PeepholeParameters, QLstmDescriptor::m_ProjectionEnabled, QLstmLayer::m_ProjectionParameters, QLstmOptProjectionParameters::m_ProjectionWeights, QLstmBasicParameters::m_RecurrentToCellWeights, QLstmBasicParameters::m_RecurrentToForgetWeights, QLstmOptCifgParameters::m_RecurrentToInputWeights, QLstmBasicParameters::m_RecurrentToOutputWeights, Layer::m_ShapeInferenceMethod, Layer::ValidateAndCopyShape(), Layer::VerifyLayerConnections(), and Layer::VerifyShapeInferenceType().

169 {
171 
172  const TensorShape& outputShape = GetOutputSlot(0).GetTensorInfo().GetShape();
173 
175 
176  auto inferredShapes = InferOutputShapes(
177  {
179  GetInputSlot(1).GetConnection()->GetTensorInfo().GetShape(), // previousOutputIn
180  GetInputSlot(2).GetConnection()->GetTensorInfo().GetShape() // previousCellStateIn
181  });
182 
183  ARMNN_ASSERT(inferredShapes.size() == 3);
184 
185  // Check if the weights are nullptr for basic params
187  "QLstmLayer: m_BasicParameters.m_InputToForgetWeights should not be null.");
189  "QLstmLayer: m_BasicParameters.m_InputToCellWeights should not be null.");
191  "QLstmLayer: m_BasicParameters.m_InputToOutputWeights should not be null.");
193  "QLstmLayer: m_BasicParameters.m_RecurrentToForgetWeights should not be null.");
195  "QLstmLayer: m_BasicParameters.m_RecurrentToCellWeights should not be null.");
197  "QLstmLayer: m_BasicParameters.m_RecurrentToOutputWeights should not be null.");
199  "QLstmLayer: m_BasicParameters.m_ForgetGateBias should not be null.");
201  "QLstmLayer: m_BasicParameters.m_CellBias should not be null.");
203  "QLstmLayer: m_BasicParameters.m_OutputGateBias should not be null.");
204 
205  if (!m_Param.m_CifgEnabled)
206  {
208  "QLstmLayer: m_CifgParameters.m_InputToInputWeights should not be null.");
210  "QLstmLayer: m_CifgParameters.m_RecurrentToInputWeights should not be null.");
212  "QLstmLayer: m_CifgParameters.m_InputGateBias should not be null.");
213 
214  ValidateAndCopyShape(outputShape, inferredShapes[0], m_ShapeInferenceMethod, "QLstmLayer");
215  }
216  else
217  {
219  "QLstmLayer: m_CifgParameters.m_InputToInputWeights should not have a value when CIFG is enabled.");
221  "QLstmLayer: m_CifgParameters.m_RecurrentToInputWeights should "
222  "not have a value when CIFG is enabled.");
224  "QLstmLayer: m_CifgParameters.m_InputGateBias should not have a value when CIFG is enabled.");
225 
226  ValidateAndCopyShape(outputShape, inferredShapes[0], m_ShapeInferenceMethod, "QLstmLayer");
227  }
228 
230  {
232  "QLstmLayer: m_ProjectionParameters.m_ProjectionWeights should not be null.");
233  }
234 
236  {
237  if (!m_Param.m_CifgEnabled) {
239  "QLstmLayer: m_PeepholeParameters.m_CellToInputWeights should not be null "
240  "when Peephole is enabled and CIFG is disabled.");
241  }
242 
244  "QLstmLayer: m_PeepholeParameters.m_CellToForgetWeights should not be null.");
246  "QLstmLayer: m_PeepholeParameters.m_CellToOutputWeights should not be null.");
247  }
248 
250  GetOutputSlot(1).GetTensorInfo().GetShape(), inferredShapes[1], m_ShapeInferenceMethod, "QLstmLayer", 1);
252  GetOutputSlot(2).GetTensorInfo().GetShape(), inferredShapes[2], m_ShapeInferenceMethod, "QLstmLayer", 2);
253 
255  {
257  {
259  "QLstmLayer: m_LayerNormParameters.m_InputLayerNormWeights should not be null.");
260  }
262  "QLstmLayer: m_LayerNormParameters.m_ForgetLayerNormWeights should not be null.");
264  "QLstmLayer: m_LayerNormParameters.m_CellLayerNormWeights should not be null.");
266  "QLstmLayer: m_LayerNormParameters.m_UutputLayerNormWeights should not be null.");
267  }
268 }
QLstmDescriptor m_Param
The parameters for the layer (not including tensor-valued weights etc.).
const TensorShape & GetShape() const
Definition: Tensor.hpp:187
QLstmOptProjectionParameters m_ProjectionParameters
Definition: QLstmLayer.hpp:85
std::unique_ptr< ScopedCpuTensorHandle > m_OutputGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:35
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:61
std::unique_ptr< ScopedCpuTensorHandle > m_CellLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:73
bool m_PeepholeEnabled
Enable/disable peephole.
std::unique_ptr< ScopedCpuTensorHandle > m_InputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:69
std::unique_ptr< ScopedCpuTensorHandle > m_InputToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:59
std::unique_ptr< ScopedCpuTensorHandle > m_CellToOutputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:53
std::unique_ptr< ScopedCpuTensorHandle > m_ProjectionWeights
A unique pointer to represent 2D weights tensor with dimensions [output_size, num_units] (QSymmS8)...
Definition: QLstmLayer.hpp:41
std::unique_ptr< ScopedCpuTensorHandle > m_InputToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:17
std::unique_ptr< ScopedCpuTensorHandle > m_CellBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:33
void VerifyShapeInferenceType(const TensorShape &outputShape, ShapeInferenceMethod shapeInferenceMethod)
Definition: Layer.cpp:432
std::unique_ptr< ScopedCpuTensorHandle > m_InputToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:21
const IOutputSlot * GetConnection() const override
Definition: Layer.hpp:199
std::unique_ptr< ScopedCpuTensorHandle > m_OutputLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:75
void ValidateAndCopyShape(const TensorShape &outputShape, const TensorShape &inferredShape, const ShapeInferenceMethod shapeInferenceMethod, const std::string &layerName, const unsigned int outputSlotIndex=0)
Definition: Layer.cpp:392
QLstmOptLayerNormParameters m_LayerNormParameters
Definition: QLstmLayer.hpp:87
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:24
void VerifyLayerConnections(unsigned int expectedConnections, const CheckLocation &location) const
Definition: Layer.cpp:344
std::unique_ptr< ScopedCpuTensorHandle > m_CellToInputWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:49
const InputSlot & GetInputSlot(unsigned int index) const override
Get a const input slot handle by slot index.
Definition: Layer.hpp:312
bool m_LayerNormEnabled
Enable/disable layer normalization.
#define ARMNN_ASSERT_MSG(COND, MSG)
Definition: Assert.hpp:15
std::unique_ptr< ScopedCpuTensorHandle > m_CellToForgetWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:51
std::unique_ptr< ScopedCpuTensorHandle > m_InputGateBias
A unique pointer to represent 1D weights tensor with dimensions [num_units] (int32).
Definition: QLstmLayer.hpp:63
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetLayerNormWeights
A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16).
Definition: QLstmLayer.hpp:71
#define CHECK_LOCATION()
Definition: Exceptions.hpp:197
std::unique_ptr< ScopedCpuTensorHandle > m_InputToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:19
QLstmBasicParameters m_BasicParameters
Definition: QLstmLayer.hpp:83
std::unique_ptr< ScopedCpuTensorHandle > m_ForgetGateBias
A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...
Definition: QLstmLayer.hpp:31
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:26
bool m_ProjectionEnabled
Enable/disable the projection layer.
std::unique_ptr< ScopedCpuTensorHandle > m_RecurrentToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...
Definition: QLstmLayer.hpp:28
const OutputSlot & GetOutputSlot(unsigned int index=0) const override
Get the const output slot handle by slot index.
Definition: Layer.hpp:314
virtual const TensorInfo & GetTensorInfo() const =0
QLstmOptCifgParameters m_CifgParameters
Definition: QLstmLayer.hpp:84
QLstmOptPeepholeParameters m_PeepholeParameters
Definition: QLstmLayer.hpp:86
std::vector< TensorShape > InferOutputShapes(const std::vector< TensorShape > &inputShapes) const override
By default returns inputShapes if the number of inputs are equal to number of outputs, otherwise infers the output shapes from given input shapes and layer properties.
Definition: QLstmLayer.cpp:151
const TensorInfo & GetTensorInfo(const ITensorHandle *tensorHandle)
float32 helpers
const TensorInfo & GetTensorInfo() const override
Definition: Layer.cpp:63
bool m_CifgEnabled
Enable/disable CIFG (coupled input & forget gate).
ShapeInferenceMethod m_ShapeInferenceMethod
Definition: Layer.hpp:387

Member Data Documentation

◆ m_BasicParameters

◆ m_CifgParameters

◆ m_LayerNormParameters

◆ m_PeepholeParameters

◆ m_ProjectionParameters


The documentation for this class was generated from the following files: