ArmNN
 21.08
QuantizedLstmLayer.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include <Layer.hpp>
8 
9 namespace armnn
10 {
11 
12 class ScopedTensorHandle;
13 
15 {
16  /// A unique pointer to represent 2D weights tensor with dimensions [outputSize, inputSize] (QAsymm8).
17  std::shared_ptr<ConstTensorHandle> m_InputToInputWeights;
18  /// A unique pointer to represent 2D weights tensor with dimensions [outputSize, inputSize] (QAsymm8).
19  std::shared_ptr<ConstTensorHandle> m_InputToForgetWeights;
20  /// A unique pointer to represent 2D weights tensor with dimensions [outputSize, inputSize] (QAsymm8).
21  std::shared_ptr<ConstTensorHandle> m_InputToCellWeights;
22  /// A unique pointer to represent 2D weights tensor with dimensions [outputSize, inputSize] (QAsymm8).
23  std::shared_ptr<ConstTensorHandle> m_InputToOutputWeights;
24 
25  /// A unique pointer to represent 2D weights tensor with dimensions [outputSize, outputSize] (QAsymm8).
26  std::shared_ptr<ConstTensorHandle> m_RecurrentToInputWeights;
27  /// A unique pointer to represent 2D weights tensor with dimensions [outputSize, outputSize] (QAsymm8).
28  std::shared_ptr<ConstTensorHandle> m_RecurrentToForgetWeights;
29  /// A unique pointer to represent 2D weights tensor with dimensions [outputSize, outputSize] (QAsymm8).
30  std::shared_ptr<ConstTensorHandle> m_RecurrentToCellWeights;
31  /// A unique pointer to represent 2D weights tensor with dimensions [outputSize, outputSize] (QAsymm8).
32  std::shared_ptr<ConstTensorHandle> m_RecurrentToOutputWeights;
33 
34  /// A unique pointer to represent 1D bias tensor with dimensions [outputSize] (int32).
35  std::shared_ptr<ConstTensorHandle> m_InputGateBias;
36  /// A unique pointer to represent 1D bias tensor with dimensions [outputSize] (int32).
37  std::shared_ptr<ConstTensorHandle> m_ForgetGateBias;
38  /// A unique pointer to represent 1D bias tensor with dimensions [outputSize] (int32).
39  std::shared_ptr<ConstTensorHandle> m_CellBias;
40  /// A unique pointer to represent 1D bias tensor with dimensions [outputSize] (int32).
41  std::shared_ptr<ConstTensorHandle> m_OutputGateBias;
42 };
43 
44 /// This layer represents a QuantizedLstm operation.
45 class QuantizedLstmLayer : public Layer
46 {
47 public:
48 
50 
51  /// Makes a workload for the QuantizedLstm type.
52  /// @param [in] graph The graph where this layer can be found.
53  /// @param [in] factory The workload factory which will create the workload.
54  /// @return A pointer to the created workload, or nullptr if not created.
55  virtual std::unique_ptr<IWorkload> CreateWorkload(const IWorkloadFactory& factory) const override;
56 
57  /// Creates a dynamically-allocated copy of this layer.
58  /// @param [in] graph The graph into which this layer is being cloned.
59  QuantizedLstmLayer* Clone(Graph& graph) const override;
60 
61  /// Check if the input tensor shape(s)
62  /// will lead to a valid configuration of @ref QuantizedLstmLayer.
63  /// @param [in] shapeInferenceMethod Indicates if output shape shall be overwritten or just validated.
64  void ValidateTensorShapesFromInputs() override;
65 
66  /// By default returns inputShapes if the number of inputs are equal to number of outputs,
67  /// otherwise infers the output shapes from given input shapes and layer properties.
68  /// @param [in] inputShapes The input shapes layer has.
69  /// @return A vector to the inferred output shape.
70  std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override;
71 
72  void Accept(ILayerVisitor& visitor) const override;
73 
74  void ExecuteStrategy(IStrategy& strategy) const override;
75 
76 protected:
77  /// Constructor to create a QuantizedLstmLayer.
78  /// @param [in] name Optional name for the layer.
79  QuantizedLstmLayer(const char* name);
80 
81  /// Default destructor
82  ~QuantizedLstmLayer() = default;
83 
84  /// Retrieve the handles to the constant values stored by the layer.
85  /// @return A vector of the constant tensors stored by this layer.
86  Layer::ConstantTensors GetConstantTensorsByRef() override;
87 };
88 
89 } // namespace armnn
std::shared_ptr< ConstTensorHandle > m_ForgetGateBias
A unique pointer to represent 1D bias tensor with dimensions [outputSize] (int32).
QuantizedLstmParameters m_QuantizedLstmParameters
std::unique_ptr< armnn::IWorkload > CreateWorkload(const armnn::IWorkloadFactory &workloadFactory, const armnn::WorkloadInfo &info, const DescriptorType &descriptor)
std::shared_ptr< ConstTensorHandle > m_InputToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [outputSize, inputSize] (QAsymm8)...
std::shared_ptr< ConstTensorHandle > m_InputGateBias
A unique pointer to represent 1D bias tensor with dimensions [outputSize] (int32).
Copyright (c) 2021 ARM Limited and Contributors.
std::shared_ptr< ConstTensorHandle > m_InputToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [outputSize, inputSize] (QAsymm8)...
std::shared_ptr< ConstTensorHandle > m_CellBias
A unique pointer to represent 1D bias tensor with dimensions [outputSize] (int32).
std::shared_ptr< ConstTensorHandle > m_RecurrentToOutputWeights
A unique pointer to represent 2D weights tensor with dimensions [outputSize, outputSize] (QAsymm8)...
std::shared_ptr< ConstTensorHandle > m_RecurrentToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [outputSize, outputSize] (QAsymm8)...
std::shared_ptr< ConstTensorHandle > m_InputToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [outputSize, inputSize] (QAsymm8)...
std::vector< std::reference_wrapper< std::shared_ptr< ConstTensorHandle > >> ConstantTensors
Definition: Layer.hpp:393
This layer represents a QuantizedLstm operation.
std::shared_ptr< ConstTensorHandle > m_OutputGateBias
A unique pointer to represent 1D bias tensor with dimensions [outputSize] (int32).
std::shared_ptr< ConstTensorHandle > m_RecurrentToCellWeights
A unique pointer to represent 2D weights tensor with dimensions [outputSize, outputSize] (QAsymm8)...
std::shared_ptr< ConstTensorHandle > m_RecurrentToForgetWeights
A unique pointer to represent 2D weights tensor with dimensions [outputSize, outputSize] (QAsymm8)...
std::shared_ptr< ConstTensorHandle > m_InputToInputWeights
A unique pointer to represent 2D weights tensor with dimensions [outputSize, inputSize] (QAsymm8)...