1b0ec0202bc789100bb2dad78339899e4742b189
[platform/upstream/armnn.git] / src / armnn / SerializeLayerParameters.cpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #include "SerializeLayerParameters.hpp"
6 #include <armnn/TypesUtils.hpp>
7 #include <string>
8 #include <iostream>
9 #include <sstream>
10
11 namespace armnn
12 {
13
14 void
15 StringifyLayerParameters<PermuteDescriptor>::Serialize(ParameterStringifyFunction & fn,
16                                                        const PermuteDescriptor & desc)
17 {
18     std::stringstream ss;
19     ss <<  "[";
20     bool addComma = false;
21     for (auto it=desc.m_DimMappings.begin(); it!= desc.m_DimMappings.end(); ++it)
22     {
23         if (addComma)
24         {
25             ss << ",";
26         }
27         ss << *it;
28         addComma = true;
29     }
30     ss << "]";
31
32     fn("DimMappings",ss.str());
33 }
34
35 void
36 StringifyLayerParameters<ReshapeDescriptor>::Serialize(ParameterStringifyFunction & fn,
37                                                        const ReshapeDescriptor & desc)
38 {
39     std::stringstream ss;
40     ss << desc.m_TargetShape;
41     fn("TargetShape",ss.str());
42 }
43
44 void
45 StringifyLayerParameters<ActivationDescriptor>::Serialize(ParameterStringifyFunction & fn,
46                                                           const ActivationDescriptor & desc)
47 {
48     fn("Function",GetActivationFunctionAsCString(desc.m_Function));
49     fn("A",std::to_string(desc.m_A));
50     fn("B",std::to_string(desc.m_B));
51 }
52
53 void
54 StringifyLayerParameters<Convolution2dDescriptor>::Serialize(ParameterStringifyFunction & fn,
55                                                              const Convolution2dDescriptor & desc)
56 {
57     {
58         std::stringstream ss;
59         ss << "(" << desc.m_PadTop    << "," << desc.m_PadLeft
60            << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
61         fn("Padding(T,L,B,R)",ss.str());
62     }
63
64     {
65         std::stringstream ss;
66         ss << "(" << desc.m_StrideX <<  "," << desc.m_StrideY << ")";
67         fn("Stride(X,Y)", ss.str());
68     }
69
70     fn("BiasEnabled",(desc.m_BiasEnabled?"true":"false"));
71     fn("DataLayout",GetDataLayoutName(desc.m_DataLayout));
72 }
73
74 void
75 StringifyLayerParameters<BatchNormalizationDescriptor>::Serialize(ParameterStringifyFunction & fn,
76                                                                   const BatchNormalizationDescriptor & desc)
77 {
78     fn("Eps",std::to_string(desc.m_Eps));
79 }
80
81 void
82 StringifyLayerParameters<DepthwiseConvolution2dDescriptor>::Serialize(ParameterStringifyFunction & fn,
83                                                                       const DepthwiseConvolution2dDescriptor & desc)
84 {
85     {
86         std::stringstream ss;
87         ss << "(" << desc.m_PadTop    << "," << desc.m_PadLeft
88            << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
89         fn("Padding(T,L,B,R)",ss.str());
90     }
91
92     {
93         std::stringstream ss;
94         ss << "(" << desc.m_StrideX <<  "," << desc.m_StrideY << ")";
95         fn("Stride(X,Y)", ss.str());
96     }
97
98     fn("BiasEnabled",(desc.m_BiasEnabled?"true":"false"));
99     fn("DataLayout",std::to_string(int(desc.m_DataLayout)));
100 }
101
102 void
103 StringifyLayerParameters<Pooling2dDescriptor>::Serialize(ParameterStringifyFunction & fn,
104                                                          const Pooling2dDescriptor & desc)
105 {
106     fn("Type", GetPoolingAlgorithmAsCString(desc.m_PoolType));
107     {
108         std::stringstream ss;
109         ss << "(" << desc.m_PadTop    << "," << desc.m_PadLeft
110            << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
111         fn("Padding(T,L,B,R)",ss.str());
112     }
113
114     {
115         std::stringstream ss;
116         ss << "(" << desc.m_PoolWidth    << "," << desc.m_PoolHeight << ")";
117         fn("(Width,Height)",ss.str());
118     }
119
120     {
121         std::stringstream ss;
122         ss << "(" << desc.m_StrideX <<  "," << desc.m_StrideY << ")";
123         fn("Stride(X,Y)", ss.str());
124     }
125
126     fn("OutputShapeRounding", GetOutputShapeRoundingAsCString(desc.m_OutputShapeRounding));
127     fn("PaddingMethod", GetPaddingMethodAsCString(desc.m_PaddingMethod));
128 }
129
130 void
131 StringifyLayerParameters<SoftmaxDescriptor>::Serialize(ParameterStringifyFunction & fn,
132                                                        const SoftmaxDescriptor & desc)
133 {
134     fn("Beta", std::to_string(desc.m_Beta));
135 }
136
137 void
138 StringifyLayerParameters<FullyConnectedDescriptor>::Serialize(ParameterStringifyFunction & fn,
139                                                               const FullyConnectedDescriptor & desc)
140 {
141     fn("BiasEnabled", (desc.m_BiasEnabled?"true":"false"));
142     fn("TransposeWeightMatrix", (desc.m_TransposeWeightMatrix?"true":"false"));
143 }
144
145 void
146 StringifyLayerParameters<OriginsDescriptor>::Serialize(ParameterStringifyFunction & fn,
147                                                        const OriginsDescriptor & desc)
148 {
149     uint32_t numViews = desc.GetNumViews();
150     uint32_t numDims  = desc.GetNumDimensions();
151
152     for (uint32_t view=0; view<numViews; ++view)
153     {
154         std::stringstream key;
155         key << "MergeTo#" << view;
156         std::stringstream value;
157         value << "[";
158         auto viewData = desc.GetViewOrigin(view);
159
160         for (uint32_t dim=0; dim<numDims; ++dim)
161         {
162             if(dim > 0)
163             {
164                 value << ",";
165             }
166             value << viewData[dim];
167         }
168         value << "]";
169         fn(key.str(), value.str());
170     }
171 }
172
173 }