ArmNN
 20.02
FullyConnectedLayer.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
8 
9 namespace armnn
10 {
11 
12 class ScopedCpuTensorHandle;
13 
14 /// This layer represents a fully connected operation.
15 class FullyConnectedLayer : public LayerWithParameters<FullyConnectedDescriptor>
16 {
17 public:
18  /// A unique pointer to store Weight values.
19  std::unique_ptr<ScopedCpuTensorHandle> m_Weight;
20  /// A unique pointer to store Bias values.
21  std::unique_ptr<ScopedCpuTensorHandle> m_Bias;
22 
23  /// Makes a workload for the FullyConnected type.
24  /// @param [in] graph The graph where this layer can be found.
25  /// @param [in] factory The workload factory which will create the workload.
26  /// @return A pointer to the created workload, or nullptr if not created.
27  virtual std::unique_ptr<IWorkload> CreateWorkload(const IWorkloadFactory& factory) const override;
28 
29  /// Creates a dynamically-allocated copy of this layer.
30  /// @param [in] graph The graph into which this layer is being cloned.
31  FullyConnectedLayer* Clone(Graph& graph) const override;
32 
33  /// Check if the input tensor shape(s)
34  /// will lead to a valid configuration of @ref FullyConnectedLayer.
35  void ValidateTensorShapesFromInputs() override;
36 
37  /// By default returns inputShapes if the number of inputs are equal to number of outputs,
38  /// otherwise infers the output shapes from given input shapes and layer properties.
39  /// @param [in] inputShapes The input shapes layer has.
40  /// @return A vector to the inferred output shape.
41  std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override;
42 
43  void Accept(ILayerVisitor& visitor) const override;
44 
45 protected:
46  /// Constructor to create a FullyConnectedLayer.
47  /// @param [in] param FullyConnectedDescriptor to configure the fully connected operation.
48  /// @param [in] name Optional name for the layer.
49  FullyConnectedLayer(const FullyConnectedDescriptor& param, const char* name);
50 
51  /// Default destructor
52  ~FullyConnectedLayer() = default;
53 
54  /// Retrieve the handles to the constant values stored by the layer.
55  /// @return A vector of the constant tensors stored by this layer.
57 };
58 
59 } // namespace
void Accept(ILayerVisitor &visitor) const override
Apply a visitor to this layer.
virtual std::unique_ptr< IWorkload > CreateWorkload(const IWorkloadFactory &factory) const override
Makes a workload for the FullyConnected type.
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.
std::unique_ptr< ScopedCpuTensorHandle > m_Weight
A unique pointer to store Weight values.
ConstantTensors GetConstantTensorsByRef() override
Retrieve the handles to the constant values stored by the layer.
void ValidateTensorShapesFromInputs() override
Check if the input tensor shape(s) will lead to a valid configuration of FullyConnectedLayer.
FullyConnectedLayer * Clone(Graph &graph) const override
Creates a dynamically-allocated copy of this layer.
Copyright (c) 2020 ARM Limited.
FullyConnectedLayer(const FullyConnectedDescriptor &param, const char *name)
Constructor to create a FullyConnectedLayer.
~FullyConnectedLayer()=default
Default destructor.
This layer represents a fully connected operation.
A FullyConnectedDescriptor for the FullyConnectedLayer.
std::unique_ptr< ScopedCpuTensorHandle > m_Bias
A unique pointer to store Bias values.
std::vector< std::reference_wrapper< std::unique_ptr< ScopedCpuTensorHandle > >> ConstantTensors
Definition: Layer.hpp:363