blob: 471ce3ec687545e4d702b6d136f30044efa89dd9 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5#pragma once
6
7#include <armnn/DescriptorsFwd.hpp>
telsoa01c577f2c2018-08-31 09:22:23 +01008#include <armnn/LstmParams.hpp>
telsoa014fcda012018-03-09 14:13:49 +00009#include <armnn/TensorFwd.hpp>
10#include <armnn/Types.hpp>
11
12#include <armnn/INetwork.hpp>
13
14#include <string>
15#include <vector>
16#include <memory>
17
18#include "Layer.hpp"
19
20namespace armnn
21{
22class Graph;
23
telsoa01c577f2c2018-08-31 09:22:23 +010024/// Private implementation of INetwork.
telsoa014fcda012018-03-09 14:13:49 +000025class Network final : public INetwork
26{
27public:
28 Network();
29 ~Network();
30
31 const Graph& GetGraph() const { return *m_Graph; }
32
33 Status PrintGraph() override;
34
35 IConnectableLayer* AddInputLayer(LayerBindingId id, const char* name=nullptr) override;
36
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +000037 IConnectableLayer* AddBatchToSpaceNdLayer(const BatchToSpaceNdDescriptor& batchToSpaceNdDescriptor,
38 const char* name = nullptr) override;
39
telsoa014fcda012018-03-09 14:13:49 +000040 IConnectableLayer* AddConvolution2dLayer(const Convolution2dDescriptor& convolution2dDescriptor,
41 const ConstTensor& weights,
42 const char* name = nullptr) override;
43
44 IConnectableLayer* AddConvolution2dLayer(const Convolution2dDescriptor& convolution2dDescriptor,
45 const ConstTensor& weights,
46 const ConstTensor& biases,
47 const char* name = nullptr) override;
48
49 IConnectableLayer* AddDepthwiseConvolution2dLayer(
50 const DepthwiseConvolution2dDescriptor& convolution2dDescriptor,
51 const ConstTensor& weights,
52 const char* name = nullptr) override;
53
54 IConnectableLayer* AddDepthwiseConvolution2dLayer(
55 const DepthwiseConvolution2dDescriptor& convolution2dDescriptor,
56 const ConstTensor& weights,
57 const ConstTensor& biases,
58 const char* name = nullptr) override;
59
60 IConnectableLayer* AddFullyConnectedLayer(const FullyConnectedDescriptor& fullyConnectedDescriptor,
61 const ConstTensor& weights,
62 const char* name = nullptr) override;
63
64 IConnectableLayer* AddFullyConnectedLayer(const FullyConnectedDescriptor& fullyConnectedDescriptor,
65 const ConstTensor& weights,
66 const ConstTensor& biases,
67 const char* name = nullptr) override;
68
69 IConnectableLayer* AddPermuteLayer(const PermuteDescriptor& permuteDescriptor,
70 const char* name = nullptr) override;
71
72 IConnectableLayer* AddPooling2dLayer(const Pooling2dDescriptor& pooling2dDescriptor,
73 const char* name = nullptr) override;
74
75 IConnectableLayer* AddActivationLayer(const ActivationDescriptor& activationDescriptor,
76 const char* name = nullptr) override;
77
78 IConnectableLayer* AddNormalizationLayer(const NormalizationDescriptor& normalizationDescriptor,
79 const char* name = nullptr) override;
80
81 IConnectableLayer* AddSoftmaxLayer(const SoftmaxDescriptor& softmaxDescriptor,
82 const char* name = nullptr) override;
83
84 IConnectableLayer* AddSplitterLayer(const ViewsDescriptor& splitterDescriptor,
85 const char* name = nullptr) override;
86
87 IConnectableLayer* AddMergerLayer(const OriginsDescriptor& mergerDescriptor,
88 const char* name = nullptr) override;
89
90 IConnectableLayer* AddAdditionLayer(const char* name = nullptr) override;
91
92 IConnectableLayer* AddMultiplicationLayer(const char* name = nullptr) override;
93
94 IConnectableLayer* AddBatchNormalizationLayer(const BatchNormalizationDescriptor& desc,
95 const ConstTensor& mean,
96 const ConstTensor& variance,
97 const ConstTensor& beta,
98 const ConstTensor& gamma,
99 const char* name = nullptr) override;
100
101 IConnectableLayer* AddResizeBilinearLayer(const ResizeBilinearDescriptor& resizeDesc,
102 const char* name = nullptr) override;
103
Matteo Martincighbcd3c852018-09-28 14:14:12 +0100104 IConnectableLayer* AddL2NormalizationLayer(const L2NormalizationDescriptor& desc,
105 const char* name = nullptr) override;
telsoa014fcda012018-03-09 14:13:49 +0000106
107 IConnectableLayer* AddConstantLayer(const ConstTensor& input, const char* name = nullptr) override;
108
109 IConnectableLayer* AddReshapeLayer(const ReshapeDescriptor& reshapeDescriptor,
110 const char* name = nullptr) override;
111
Nattapat Chaimanowong207ef9a2018-11-02 10:57:25 +0000112 IConnectableLayer* AddSpaceToBatchNdLayer(const SpaceToBatchNdDescriptor& spaceToBatchNdDescriptor,
113 const char* name = nullptr) override;
114
telsoa014fcda012018-03-09 14:13:49 +0000115 IConnectableLayer* AddFloorLayer(const char* name = nullptr) override;
116
117 IConnectableLayer* AddOutputLayer(LayerBindingId id, const char* name = nullptr) override;
118
telsoa01c577f2c2018-08-31 09:22:23 +0100119 IConnectableLayer* AddLstmLayer(const LstmDescriptor& descriptor,
120 const LstmInputParams& params,
121 const char* name = nullptr) override;
122
Francis Murtaghe7a86a42018-08-29 12:42:10 +0100123 IConnectableLayer* AddDivisionLayer(const char* name = nullptr) override;
124
David Beck19526222018-09-12 16:00:08 +0100125 IConnectableLayer* AddSubtractionLayer(const char* name = nullptr) override;
126
narpra0132b90462018-09-13 11:07:48 +0100127 IConnectableLayer* AddMeanLayer(const MeanDescriptor& meanDescriptor, const char* name = nullptr) override;
128
Mohamed Nour Abouelseoud5662c202018-09-24 13:30:09 +0100129 IConnectableLayer* AddPadLayer(const PadDescriptor& padDescriptor, const char* name = nullptr) override;
130
Conor Kennedy430b5d82018-11-14 15:28:28 +0000131 IConnectableLayer* AddStridedSliceLayer(const StridedSliceDescriptor& stridedSliceDescriptor,
132 const char* name = nullptr) override;
133
telsoa014fcda012018-03-09 14:13:49 +0000134private:
135 IConnectableLayer* AddFullyConnectedLayerImpl(const FullyConnectedDescriptor& fullyConnectedDescriptor,
136 const ConstTensor& weights,
137 const ConstTensor* biases,
138 const char* name);
139
140 IConnectableLayer* AddConvolution2dLayerImpl(const Convolution2dDescriptor& convolution2dDescriptor,
141 const ConstTensor& weights,
142 const ConstTensor* biases,
143 const char* name);
144
145 IConnectableLayer* AddDepthwiseConvolution2dLayerImpl(
146 const DepthwiseConvolution2dDescriptor& convolution2dDescriptor,
147 const ConstTensor& weights,
148 const ConstTensor* biases,
149 const char* name);
150
151 std::unique_ptr<Graph> m_Graph;
152};
153
154class OptimizedNetwork final : public IOptimizedNetwork
155{
156public:
157 OptimizedNetwork(std::unique_ptr<Graph> graph);
158 ~OptimizedNetwork();
159
160 Status PrintGraph() override;
surmeh01bceff2f2018-03-29 16:29:27 +0100161 Status SerializeToDot(std::ostream& stream) const override;
telsoa014fcda012018-03-09 14:13:49 +0000162
163 Graph& GetGraph() { return *m_Graph; }
164
165private:
166 std::unique_ptr<Graph> m_Graph;
167};
168
169} // namespace armnn