ArmNN
 21.11
SplitterLayer.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 
8 
9 namespace armnn
10 {
11 
12 /// This layer represents a split operation.
13 class SplitterLayer : public LayerWithParameters<ViewsDescriptor>
14 {
15 public:
16  /// Makes a workload for the Splitter type.
17  /// @param [in] graph The graph where this layer can be found.
18  /// @param [in] factory The workload factory which will create the workload.
19  /// @return A pointer to the created workload, or nullptr if not created.
20  virtual std::unique_ptr<IWorkload> CreateWorkload(const IWorkloadFactory& factory) const override;
21 
22  /// Set the outputs to be appropriate sub tensors of the input if sub tensors are supported
23  /// otherwise creates tensor handlers.
24  /// @param [in] registry Contains all the registered tensor handle factories available for use.
25  /// @param [in] factory The workload factory which will create the workload.
26  /// @param [in] IsMemoryManaged Determine whether or not to assign a memory manager during creation
27  virtual void CreateTensorHandles(const TensorHandleFactoryRegistry& registry,
28  const IWorkloadFactory& factory,
29  const bool IsMemoryManaged = true) override;
30 
31  /// Creates a dynamically-allocated copy of this layer.
32  /// @param [in] graph The graph into which this layer is being cloned.
33  SplitterLayer* Clone(Graph& graph) const override;
34 
35  /// Check if the input tensor shape(s)
36  /// will lead to a valid configuration of @ref SplitterLayer.
37  /// @param [in] shapeInferenceMethod Indicates if output shape shall be overwritten or just validated.
38  void ValidateTensorShapesFromInputs() override;
39 
40  /// By default returns inputShapes if the number of inputs are equal to number of outputs,
41  /// otherwise infers the output shapes from given input shapes and layer properties.
42  /// @param [in] inputShapes The input shapes layer has.
43  /// @return A vector to the inferred output shape.
44  std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override;
45 
47  void Accept(ILayerVisitor& visitor) const override;
49 
50 
51 protected:
52  /// Constructor to create a SplitterLayer.
53  /// @param [in] param ViewsDescriptor to configure the splitter operation.
54  /// @param [in] name Optional name for the layer.
55  SplitterLayer(const ViewsDescriptor& param, const char* name);
56 
57  /// Default destructor
58  ~SplitterLayer() = default;
59 
60 private:
61  template <typename FactoryType>
62  void CreateTensors(const TensorHandleFactoryRegistry& registry, const FactoryType& factory, bool isMemoryManaged);
63 };
64 
65 } // namespace
SplitterLayer(const ViewsDescriptor &param, const char *name)
Constructor to create a SplitterLayer.
This layer represents a split operation.
virtual void CreateTensorHandles(const TensorHandleFactoryRegistry &registry, const IWorkloadFactory &factory, const bool IsMemoryManaged=true) override
Set the outputs to be appropriate sub tensors of the input if sub tensors are supported otherwise cre...
A ViewsDescriptor for the SplitterLayer.
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
Definition: Deprecated.hpp:33
ARMNN_NO_DEPRECATE_WARN_BEGIN void Accept(ILayerVisitor &visitor) const override
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.
Copyright (c) 2021 ARM Limited and Contributors.
#define ARMNN_NO_DEPRECATE_WARN_END
Definition: Deprecated.hpp:34
~SplitterLayer()=default
Default destructor.
void ValidateTensorShapesFromInputs() override
Check if the input tensor shape(s) will lead to a valid configuration of SplitterLayer.
SplitterLayer * Clone(Graph &graph) const override
Creates a dynamically-allocated copy of this layer.
virtual std::unique_ptr< IWorkload > CreateWorkload(const IWorkloadFactory &factory) const override
Makes a workload for the Splitter type.